Структура программы windows для решения поставленной...

22
Структура программы Windows для решения поставленной задачи Меркулов Артем Магистрант первого года обучения

Upload: tania

Post on 05-Jan-2016

75 views

Category:

Documents


0 download

DESCRIPTION

Структура программы Windows для решения поставленной задачи. Меркулов Артем Магистрант первого года обучения. 1. Однопоточное приложение. Основной поток Вычисления В цикле с ожиданием сообщений При обработке сообщения WM_TIMER Визуализация Ввод/вывод данных - PowerPoint PPT Presentation

TRANSCRIPT

Page 1: Структура программы  Windows  для решения поставленной задачи

Структура программы Windows для решения поставленной задачи

Меркулов АртемМагистрант первого года обучения

Page 2: Структура программы  Windows  для решения поставленной задачи

1. Однопоточное приложение

Основной поток Вычисления

В цикле с ожиданием сообщений При обработке сообщения WM_TIMER

Визуализация Ввод/вывод данных

Считывание начальных данных из файла Передача через командную строку Статически − в программе Использование элементов управления

Page 3: Структура программы  Windows  для решения поставленной задачи

2. Основной поток + вычислительный поток

Основной поток Визуализация Ввод/вывод данных Синхронизация с вычислительным

потоком Ожидание завершения потока Использование семафоров

Вычислительный поток Вычисления

Page 4: Структура программы  Windows  для решения поставленной задачи

3. Основной поток + много вычислительных потоков

Основной поток Ввод/вывод Синхронизация с вычислительными

потоками Ожидание завершения потоков С использованием семафоров

Визуализация Вычислительный поток

Вычисления Синхронизация с другими потоками

Page 5: Структура программы  Windows  для решения поставленной задачи

Однопоточное приложение

С использованием таймераcase WM_CREATE:

SetTimer();break;

…case WM_TIMER:

ВычисленияВизуализацияbreak;

Нельзя точно угадать на какой интервал ставить таймер

Page 6: Структура программы  Windows  для решения поставленной задачи

Однопоточное приложение Вычисления в свободное времяwhile(1){

while(!PeekMessage(&msg)){ВычисленияВизуализация

}while(PeekMessage(&msg)){

if(msg.message==WM_QUIT){return;

}TranslateMessage();DispatchMessage();

}}

Page 7: Структура программы  Windows  для решения поставленной задачи

Основной поток + вычислительный поток

Ожидание завершения потоков

Частое порождение и завершениепотоков может повлиять напроизводительность

HANDLE Thread[M];

for(i=0;i<M;i++){

Thread[i]=CreateThread(0,0,ComputetionalThread,(void*)i,0,0);

}

i=MsgWaitForMultipleObjectsEx(M,Thread,INFINITE,QS_ALLEVENTS,MWMO_WAITALL);

Page 8: Структура программы  Windows  для решения поставленной задачи

Основной поток + вычислительный поток

Использование семафоров// вычислительный поток

for(time=0;time<TIME;time+=dt){

WaitForSingleObject(Mutex[i]);

ReleaseMutex();

}

// основной поток

HANDLE Mutex[M]; char name[100];

for(i=0;i<M;i++){ sprintf(name,”mutex_%d”,i); Mutex[i]=CreateMutex(0,true,name);

CreateThread(0,0,ComputetionalThread,(void*)i,0,0);

}

MsgWaitForMultipleObjectsEx(M,Thread,INFINITE,QS_ALLEVENTS,MWMO_WAITALL);

Page 9: Структура программы  Windows  для решения поставленной задачи

Синхронизация между вычислительными потоками

N=M*K N частиц M потоков K частиц в одном потоке

Синхронизация нужна при вычислении силы.

Page 10: Структура программы  Windows  для решения поставленной задачи

Синхронизация между вычислительными потоками 1. С использованием критического интервала

// Основной потокInitializeCriticalSection();

// Выислительные потокиEnterCriticalSection();

ВычисленияLeaveCriticalSection();

Практически последовательный вариант

Page 11: Структура программы  Windows  для решения поставленной задачи

Синхронизация между вычислительными потоками 2. С использованием семафоров//Основной потокfor(i=0;i<M;i++){Mutex[i]=CreateMutex(); Mutex2[i]=CreateMutex();}Mutex3=CreateMutex(Mutex3);// Вычислительные потокиfor(i=0;i<M;i++){Mutex[i]=OpenMutex(); Mutex2[i]=OpenMutex();}Mutex3=OpenMutex();for(i=0;i<M;i++){WaitForSingleObject(Mutex3)

j=WaitForMultipleObjects(Mutex);WaitForMultipleObjects(Mutex2[MyNumber]);

ReleaseMutex(Mutex3);Производим вычисления с использованием частиц j-го потокаReleaseMutex(Mutex[j]); ReleaseMutex(Mutex2[MyNumber]);

}

Page 12: Структура программы  Windows  для решения поставленной задачи

Графические средства

GDI – graphic device interface Используется в Windows для

изображения 2D графики OpenGL – open graphic library

Кросс платформенная графическая библиотека для изображения 2D и 3D графики

Page 13: Структура программы  Windows  для решения поставленной задачи

GDI

Преобразование координат Перенос Масштабирование Поворот Искривление

Логическое преобразование Задание единиц измерения

Page 14: Структура программы  Windows  для решения поставленной задачи

y

x

y

x

1)

2)

Окно

Экран

Система координат модели

Page 15: Структура программы  Windows  для решения поставленной задачи

Перенос

Page 16: Структура программы  Windows  для решения поставленной задачи

Масштабирование

Page 17: Структура программы  Windows  для решения поставленной задачи

Поворот

Page 18: Структура программы  Windows  для решения поставленной задачи

Искривление

Page 19: Структура программы  Windows  для решения поставленной задачи

Преобразование координат Вручную

Пересчет координат по формулам С помощью средств GDI

SetWorldTransform(HDC,XFORM*);XFORM{

FLOAT eM11; FLOAT eM12; FLOAT eM21; FLOAT eM22; FLOAT eDx; FLOAT eDy;

};

Page 20: Структура программы  Windows  для решения поставленной задачи

Типы преобразования координат

Operation eM11 eM12 eM21 eM22

Поворот на угол a

cos(a) sin(a) -sin(a) cos(a)

Масштабирование

Масштаб по оси X

0 0 Масштаб по оси Y

Искривление

1 Смещение вдоль оси X

Смещение вдоль оси Y

1

Отражение ±1 0 0 ±1

eDx, eDy – сдвиг по осям X и Y соответственно.

Page 21: Структура программы  Windows  для решения поставленной задачи

Логическое преобразование

Dx = ((Lx - WOx) * VEx / WEx) + VOx

Dx x value in device units Lx x value in logical units WOx window x origin VOx viewport x origin WEx window x-extent VEx viewport x-extent

Page 22: Структура программы  Windows  для решения поставленной задачи

Логическое преобразование

BOOL SetWindowExtEx(hdc,WEx,WEy,pSize);BOOL SetWindowExtEx(hdc,VEx,VEy,pSize);BOOL SetWindowOrgEx(hdc,WOx,WOy,pPoint);BOOL SetViewportOrgEx(hdc,VOx,VOy,pPoint);

SetMapMode(hdc,MM_ANISOTROPIC);