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 :

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
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)
{ ... }
J'initialise StopThread à 0 avant de lancer le thread serveur
Pour l'arrêter, j'ai mis dans mon fichier "truc.c" :

Code : Sélectionner tout - Visualiser dans une fenêtre à part
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);
}
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.
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