1 / 22

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

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

tania
Télécharger la présentation

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

An Image/Link below is provided (as is) to download presentation Download Policy: Content on the Website is provided to you AS IS for your information and personal use and may not be sold / licensed / shared on other websites without getting consent from its author. Content is provided to you AS IS for your information and personal use only. Download presentation by click this link. While downloading, if for some reason you are not able to download a presentation, the publisher may have deleted the file from their server. During download, if you can't get a presentation, the file might be deleted by the publisher.

E N D

Presentation Transcript


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

  2. 1. Однопоточное приложение • Основной поток • Вычисления • В цикле с ожиданием сообщений • При обработке сообщения WM_TIMER • Визуализация • Ввод/выводданных • Считывание начальных данных из файла • Передача через командную строку • Статически − в программе • Использование элементов управления

  3. 2. Основной поток + вычислительный поток • Основной поток • Визуализация • Ввод/выводданных • Синхронизация с вычислительным потоком • Ожидание завершения потока • Использование семафоров • Вычислительный поток • Вычисления

  4. 3. Основной поток + много вычислительных потоков • Основной поток • Ввод/вывод • Синхронизация с вычислительными потоками • Ожидание завершения потоков • С использованием семафоров • Визуализация • Вычислительный поток • Вычисления • Синхронизация с другими потоками

  5. Однопоточное приложение С использованием таймера case WM_CREATE: SetTimer(); break; … case WM_TIMER: Вычисления Визуализация break; • Нельзя точно угадать на какой интервал ставить таймер

  6. Однопоточное приложение • Вычисления в свободное время while(1){ while(!PeekMessage(&msg)){ Вычисления Визуализация } while(PeekMessage(&msg)){ if(msg.message==WM_QUIT){ return; } TranslateMessage(); DispatchMessage(); } }

  7. Основной поток + вычислительный поток • Ожидание завершения потоков Частое порождение и завершение потоков может повлиять на производительность 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);

  8. Основной поток + вычислительный поток • Использование семафоров // вычислительный поток 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);

  9. Синхронизация между вычислительными потоками • N=M*K • N частиц • M потоков • K частиц в одном потоке • Синхронизация нужна при вычислении силы.

  10. Синхронизация между вычислительными потоками • 1. С использованием критического интервала // Основной поток InitializeCriticalSection(); // Выислительные потоки EnterCriticalSection(); Вычисления LeaveCriticalSection(); Практически последовательный вариант

  11. Синхронизация между вычислительными потоками • 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]); }

  12. Графические средства • GDI – graphic device interface • Используется в Windows для изображения 2D графики • OpenGL – open graphic library • Кросс платформенная графическая библиотека для изображения 2D и 3D графики

  13. GDI • Преобразование координат • Перенос • Масштабирование • Поворот • Искривление • Логическое преобразование • Задание единиц измерения

  14. 1) 2) y y Система координат модели x x Окно Экран

  15. Перенос

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

  17. Поворот

  18. Искривление

  19. Преобразование координат • Вручную • Пересчет координат по формулам • С помощью средств GDI • SetWorldTransform(HDC,XFORM*); XFORM { FLOAT eM11; FLOAT eM12; FLOAT eM21; FLOAT eM22; FLOAT eDx; FLOAT eDy; };

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

  21. Логическое преобразование 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

  22. Логическое преобразование 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);

More Related