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

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

description

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

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

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);