Bonjour,
Je souhaite créer un Thread avec CreateThread().
Ce thread a pour but d'envoyer des messages toutes les N secondes (avec N qui varie de 2 à 15).
J'ai créé le thread de cette manière:
Le thread est actif pendant 30 minutes à peu près (le paramètre thread_ok vaut "true" au début, puis "false" au bout de 30 minutes).
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 c_treatment::c_treatment() { thread_ok = true; DWORD dwThreadId = 0; HANDLE th = CreateThread(NULL, 0, myThread, (LPVOID)this, 0, &dwThreadId); } DWORD WINAPI myThread(LPVOID arg) { c_treatment *tr = (c_treatment *)arg; while (tr->thread_ok) { tr->updateMessage(); } return 0; }
Mais dès que le thread est actif, je n'ai plus la main sur mon application (par exemple pour cliquer sur un bouton).
Je suppose que c'est à cause de la boucle infinie contenue dans le thread.
Je suppose que normalement le thread ne devrait pas bloquer de cette manière l'application...
J'ai ajouté un Sleep(200) dans le while comme ceci:
Cela ne bloque plus mon application mais je ne trouve pas cette solution très "propre".
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10 DWORD WINAPI myThread(LPVOID arg) { c_treatment *tr = (c_treatment *)arg; while (tr->thread_ok) { tr->updateMessage(); Sleep(200); } return 0; }
Qu'en pensez-vous ?
Merci d'avance pour vos réponse.
Partager