Me revoila! lol
Bon alors j'explique mon probleme.Lorsque mon serveur se lance, il crée un Thread qui gere la connexion.A la fin de l'execution de la thread je la relance ( je prefere cela a une boucle...est-ce mieux?).
Je lance ma thread avec AfxBeginThread(lors de l initalisation de la fenetre, puis a la fin de cette meme thread ou encore si je clik sur le bouton "relancer serveur").
Mon probleme est que j'aimerai arreter ma thread a n'importe quel moment de son execution...car j arrive a arreter la thread lorsque qu'elle tourne avec une boucle et que je la creer avec CreateThread...sinon non :(
je vous met le code au cas ou:
UINT Serveur(LPVOID param)
{
CPCCommandeDlg *pObject = (CPCCommandeDlg*)param;
int test = 1;
CFile Fichier;
CTransfert Transfert;
DWORD TailleFichier;
HANDLE Hwnd;
CBitmap Rouge;
CBitmap Vert;
CBitmap Jaune;
CStatic * CS;
CStatic * CS1;
CStatic * CS2;
CStatic * CS3;
Rouge.LoadBitmap(IDB_ROUGE);
Vert.LoadBitmap(IDB_VERT);
Jaune.LoadBitmap(IDB_JAUNE);
// HANDLE d_eventStop;
// DWORD Thread_TestID;
//d_eventStop = CreateEvent(NULL, FALSE, FALSE, "event_StopTest");
CS = (CStatic *)pObject -> GetDlgItem(IDC_Init);
CS1 = (CStatic *)pObject -> GetDlgItem(IDC_ConnectClient);
CS2 = (CStatic *)pObject -> GetDlgItem(IDC_ProbConnexion);
CS3 = (CStatic *)pObject -> GetDlgItem(IDC_Attente);
// while( WaitForSingleObject(d_eventStop, D_TIME_OUT_TEST ) == WAIT_TIMEOUT )
// {
CS->SetBitmap(HBITMAP(Rouge));
CS1->SetBitmap(HBITMAP(Rouge));
CS2->SetBitmap(HBITMAP(Rouge));
CS3->SetBitmap(HBITMAP(Rouge));
Sleep(1000);
//Transfert.NameFileCString = "";
test = Transfert.ConnexionModeServeur(param);
if (test == 1 )//&& WaitForSingleObject(d_eventStop, D_TIME_OUT_TEST ) == WAIT_TIMEOUT)
{
// AfxMessageBox("La connexion a reussi");
Transfert.RecevoirDonnee();
Transfert.Serveur.~SocketProj();
closesocket(Transfert.Serveur.sockTransfert);
//AfxMessageBox(Transfert.NameFileCString);
VERIFY(Fichier.Open(Transfert.NameFileCString , CFile::modeRead));
Hwnd = CreateFile(Transfert.NameFileCString,0,0, NULL, OPEN_EXISTING,FILE_ATTRIBUTE_NORMAL,NULL);
//Creation du fichier ou ouverture
//s'il existe déjà.
TailleFichier = GetFileSize(Hwnd, NULL); //Recuperation de la taille du fichier
CloseHandle(Hwnd); //Fermeture du handle
Transfert.ConnexionModeClient();
Transfert.EnvoyerTaille(TailleFichier);
Transfert.Client.~SocketProj();
//CreateThread(NULL, 0, &Serveur, pObject, NULL, &Thread_TestID);
}
else
{
CS->SetBitmap(HBITMAP(Rouge));
CS1->SetBitmap(HBITMAP(Rouge));
CS2->SetBitmap(HBITMAP(Rouge));
CS3->SetBitmap(HBITMAP(Rouge));
AfxMessageBox("La connexion a echoué");
// CreateThread(NULL, 0, &Serveur, pObject, NULL, &Thread_TestID);
}
// }
AfxBeginThread (Serveur, pObject, THREAD_PRIORITY_LOWEST);
// CloseHandle( d_eventStop );
// d_eventStop = NULL;
return(0);
}
a l initialisations a donne sa :
BOOL CPCCommandeDlg::OnInitDialog()
{
CDialog::OnInitDialog();
SetIcon(m_hIcon, TRUE); // Set big icon
SetIcon(m_hIcon, FALSE); // Set small icon
// TODO: Add extra initialization here
// d_eventStop = CreateEvent(NULL, FALSE, FALSE, "event_StopTest");
// CreateThread(NULL, 0, &Serveur, this,NULL, &Thread_TestID);
AfxBeginThread(Serveur,this, THREAD_PRIORITY_LOWEST );
return TRUE; // return TRUE unless you set the focus to a control
}
(pour relancer le serveur avec le bouton "relancer serveur" je ne fais qu'un afxbeginthread(Serveur, this, THREAD_PRIORITY_LOWEST ))
voilà j'espere que le code n'est pas trop long :s...et j'espere que vous pourrez m'aider!!
Merci d'avance.