Audias06
Messages postés5Date d'inscriptionmercredi 31 mai 2006StatutMembreDernière intervention15 octobre 2007
-
15 oct. 2007 à 12:25
ndubien
Messages postés557Date d'inscriptiondimanche 25 septembre 2005StatutMembreDernière intervention10 mai 2014
-
17 oct. 2007 à 16:34
Bonjour,
Mon application (C++ SOUS VISUAL NET) nécessite de lancer un
thread puis, que pendant ce temps, l'application principale (qui à lancé le
thread) attende que le thread lui redonne la main pour
continuer.
Application principale -> lance le thread
le thread
s'exécute et l'application principale est à l'arrêt (attend)
le thread se
termine -> l'application principale reprend la main est
continue...
pour le moment j'ai utilisé un handle, définis dans mon appli
principal avant de lancer le thread:
m_hEvent = CreateMutex(NULL,
FALSE, NULL); // name of mutex
OpenMutex(SYNCHRONIZE
,TRUE,"m_hEvent");
// on lance le thread qui gère le traitement de la
séquence d'analyse
AfxBeginThread(ThreadTraitement,this,THREAD_PRIORITY_LOWEST,0,THREAD_TERMINATE,NULL);
//on attend la fin du
thread
WaitForSingleObject(m_hEvent,INFINITE); //45000
//on détruit le
handle
ReleaseMutex(m_hEvent);
m_hEvent = NULL;
Et évidemment à la
fin de mon thread, j'envoie à mon appli principal le handle pour sortir du wait
for...
ReleaseMutex(dialog->m_hEvent);
ÇA NE MARCHE PAS:
mon appli principal n'attend pas au niveau du wait for.... il passe devant comme
si de rien n'était...
cs_juju12
Messages postés966Date d'inscriptionsamedi 3 avril 2004StatutMembreDernière intervention 4 mars 20104 15 oct. 2007 à 18:40
J'utilise pas trop les mutex mais il me semble qu'avec WaitForSingleObject tu demandes l'accès au mutex (ownership); dans ton cas puisque le mutex n'a pas été utilisé il retourne tout de suite avec l'accès validé.
Pour attendre simplement un thread :
HANDLE hThread=CreateThread(...);
WaitForSingleObject(hThread,...).
Coome tu utilises AfxBeginThread, il retourne CWinThread donc regarde si tu peux récupérer un handle dans cette structure.