Salut tt le monde,
Je veux créer un petit prog pour échanger des données en réseau, et j'ai pour cela créé un thread serveur qui va attendre que quelqu'un se connecte puis echanger des données, ... :
truc.h :
J'initialise StopThread à 0 avant de lancer le thread serveurCode:
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
35
36
37
38
39
40 HANDLE FinThread; short StopThread; DWORD WINAPI Serveur(LPVOID lpParam) { WSADATA WSAData; WSAStartup(MAKEWORD(2,0), &WSAData); SOCKET sock; SOCKET csock; SOCKADDR_IN sin; SOCKADDR_IN csin; char buffer[1000],phrase[100]; FinThread=CreateEvent(NULL,TRUE,FALSE,NULL); sock = socket(AF_INET, SOCK_STREAM, 0); sin.sin_addr.s_addr = INADDR_ANY; sin.sin_family = AF_INET; sin.sin_port = htons(Num_Port); bind(sock, (SOCKADDR *)&sin, sizeof(sin)); listen(sock, 0); while(1) // on attend tant que personne ne se connecte ou que StopThread passe à 1 { int sinsize = sizeof(csin); // si quelqu'un se connecte if((csock = accept(sock, (SOCKADDR *)&csin, &sinsize)) != INVALID_SOCKET) { sprintf(phrase,"Connexion établie avec \"%s\"",inet_ntoa(csin.sin_addr)); MessageBox(NULL,phrase,"Message",MB_OK); break; } if(StopThread==1) // si l'interruption du thread est demandé break; } SetEvent(FinThread); } DWORD WINAPI Client(LPVOID lpParam) { ... }
Pour l'arrêter, j'ai mis dans mon fichier "truc.c" :
Etant donné que StopThread passe à 1, on devrait sortir de la boucle et finir le thread, ce qui déclencherait l'évenement FinThread, pourtant, je n'arrive jamais à fermer le thread, il m'affiche tjs "Problème de déconnexion", comme si StopThread était resté à 0.Code:
1
2
3
4
5
6
7
8 StopThread=1; if( WaitForMultipleObject(FinThread,1000)==WAIT_TIMEOUT ) MessageBox(NULL,"Problème de déconnexion","Message d'erreur",MB_OK); else { MessageBox(NULL,"Déconnexion réussie","Message",MB_OK); CloseHandle(FinThread); }
Il ne sort de la boucle que qd quelqu'un se connecte. J'ai fait la même chose dans mon thread client, même problème.
Si quelqu'un pouvait me dire d'où vient mon problème ?!
J'ai essayé d'utiliser les fonctions PostThreadMessage() et PeekMessage() au lieu d'une variable globale pour fermer mon thread, mais le résultat est le même !
Merci d'avance à quiconque peut m'éclairer sur le sujet