Bonjour,
avec leur implémentation:
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7 dans une classe jai : int runMainLoop() ; et static DWORD WINAPI ThreadProc(LPVOID lpParam) ;
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34 //run the main loop int MyClass::runMainLoop() { //start thread and get the handle m_hThread = CreateThread(NULL, NULL, ThreadProc, NULL, NULL, NULL) ; //wait thread end WaitForSingleObject(m_hThread, INFINITE) ; return 0 ; } et DWORD WINAPI MyClass::ThreadProc(LPVOID lpParam) { MSG msg={0} ; // Main message loop while(GetMessage(&msg,NULL,0,0)) { TranslateMessage(&msg) ; DispatchMessage(&msg) ; } //return (int)msg.wParam ; TODO return 0 ; }
Le contexte est que, après avoir crée une fenetre (voir un dès posts précédent ), je souhait mettre cette boucle de répartition des messages dans un thread afin de libérer la ressource processeur.
Je sais que s'il n'y a pas de messages, GetMessage justement libère la ressource processeur. Cependant ma fenetre est actualisé très souvent (30 fps) car elle sert à visualiser ce que recoit la carte tv.
Le problème est que du coup si j'ai une tache qui s'effectue en parrallèle, (un autre thread crée dans le WinMain par exemple) elle n'obtient jamais la ressource processeur.
D'où lidée de mettre cette boucle de traitement des messages dans un thread, puis rajouter quelques Sleep.
Cest la que le pb surgit, lorsque je fais appel à myclass.runMainLoop(), le wait est bloquant est je ne peux alors plus cliquer sur la fenetre (sablié)
Quelqu'un peut il m'éclairer ?
merci
Partager