Forum |  HardWare.fr | News | Articles | PC | S'identifier | S'inscrire | Shop Recherche
2772 connectés 

  FORUM HardWare.fr
  Programmation

  [Visual C++] AfxEndThread(); hors de la fonction lancée par AgxBeginTh

 


 Mot :   Pseudo :  
 
Bas de page
Auteur Sujet :

[Visual C++] AfxEndThread(); hors de la fonction lancée par AgxBeginTh

n°57376
antsite
Je me souviens
Posté le 04-09-2001 à 10:11:59  profilanswer
 

Je n'arrive pas faire fonctionner (ça compile mais ça plante) la fonction AfxEndThread HORS de la fonction lancée par AfxBeginThread();
Voici mon code :
 
CWinThread *th;
DWORD ec;
 
UINT scanIp(void* pDialog)
{
 //Longue boucle while(true){}
 return 1;
}
 
void CScanDlg::OnStart()  
{
 th = AfxBeginThread(scanIp,this);
}
 
void CScanDlg::OnStop()  
{
 GetExitCodeThread(th->m_hThread,&ec);  
 AfxEndThread(ec); //CA PLANTE !
}
 
Je tiens absolument à utiliser AfxEndThread(); et non faire un while(t == false) et mettre t = true; pour stopper le thread ! (ma boucle est trop

mood
Publicité
Posté le 04-09-2001 à 10:11:59  profilanswer
 

n°57445
BENB
100% Lux.
Posté le 04-09-2001 à 14:06:45  profilanswer
 

Ta boucle est trop quoi ?
 
C'est pourtant comme cela qu'il faut faire, avec confirmation si ta boucle est longue...
 
D'une maniere generales les methodes qui arretent brutalement une Thread a partir d'une autre sont a desconseiller...

n°57459
antsite
Je me souviens
Posté le 04-09-2001 à 14:31:39  profilanswer
 

trop longue.
Je peux pas faire le test quand je quitte mon applicaion car la boucle n'étant pas finie, ça plante (la fonction connect() prend beaucoup de temps).

n°57616
BENB
100% Lux.
Posté le 05-09-2001 à 09:03:24  profilanswer
 

Fais un test avec confirmation...
 
CWinThread *th;  
DWORD ec;
bool StopThreadRequired;
bool ThreadStopped;
 
 
UINT scanIp(void* pDialog)  
{
StopThreadRequired =  ThreadStopped = false
//Longue boucle while(!StopThreadRequired ){}
ThreadStopped = true  
return 1;  
}  
 
void CScanDlg: nStart()  
{  
th = AfxBeginThread(scanIp,this);  
}  
 
void CScanDlg: nStop()  
{  
GetExitCodeThread(th->m_hThread,&ec);
StopThreadRequired = true;
while(ThreadStopped)
{
  Sleep(100);
}
//AfxEndThread(ec); //CA PLANTE !  
}  
 
Sinon, en POSIX il y a moyen de faire des points de sychronisation, c'est en fait l'ideal dans ton cas, le AfxEndThread() est un point de synchro avec la fin de la methode IpScan()...

n°57705
antsite
Je me souviens
Posté le 05-09-2001 à 13:45:29  profilanswer
 

Le problème de ce test, c que la boucle while() prend trop de temps et que lorsque que je quitte brutalement l'appli, je met le bool = false met la boucle n'étant pas en phase de test (la boucle est longue), ç a plante !!!

n°57749
BENB
100% Lux.
Posté le 05-09-2001 à 15:14:36  profilanswer
 

Je ne comprend pas ton probleme...
1- Terminer une Thread depuis une autre ne doit jamais etre fait.
2- modifier la valeur d'un bool ne fait pas planter
3- tu n'es pas oblige d'utiliser une boucle while, tu peut retester la valeur en plusieurs endroits pour diminuer le temps de reponse.
4- As-tu vraimenet essayer avec ce systeme de confirmation...
5- Que fait tu de si long ? moi je fait des Executions de Procedure stockes... et ca marche nikel...

n°57805
antsite
Je me souviens
Posté le 05-09-2001 à 17:53:22  profilanswer
 

Quand je ferme ma dialogue (la croix), est-ce que tous les thread sont suspendus ?
Car j'ai mis ce bout de code  
 
void CScanDlg::OnClose()  
{
 halt = 1;
 while(qok == 0)
  Sleep(10);
 
 CDialog::OnClose();
}
 
halt = 1 doit arrêter le thread.
qok = 1 quand on arrive à la fin du thread (une fois que halt = 1).
Seulement quand je ferme, qok n'est jamais == 1 ce qui me laisse sous entendre que les threads sont suspendus à la fermeture.


Aller à :
Ajouter une réponse
  FORUM HardWare.fr
  Programmation

  [Visual C++] AfxEndThread(); hors de la fonction lancée par AgxBeginTh

 

Sujets relatifs
[VISUAL BASIC] Une belle boite ouvrir[ programmation en c ] => fonction exit()
Comment effacer l'ecran en mode dos sous visual c++ version 6[libs] borland/Visual C++
[ASP]Fonction replace[VISUAL BASIC] Ma période d'essai va se terminer, je suis dans le caca
[Visual Basic] Horloge Windows[Visual C++] Avis à tous les pros de Visual C++
[VISUAL BASIC] Remplir une combobox d'apres un champ access[Visual C++] TreeCtrl, un petit blème d'affichage
Plus de sujets relatifs à : [Visual C++] AfxEndThread(); hors de la fonction lancée par AgxBeginTh


Copyright © 1997-2022 Hardware.fr SARL (Signaler un contenu illicite / Données personnelles) / Groupe LDLC / Shop HFR