Bonjour à tous, voila un exemple de code qui parlera mieux que moi
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
41
42
43
void MaClasse::UpdateThread()
{
	// Initialisation :
	scoped_lock lock(s_UpdateMutex);
	s_QuitUpdateThread = false;
 
	// Boucle
	while( !s_QuitUpdateThread )
	{
		// ....
		s_UpdateCondition.wait(lock);
	}
}	
 
void MaClasse::RemoveUpdateThreadOK()
{
	scoped_lock lock(s_LaunchUpdateMutex);
		if( !s_QuitUpdateThread )
	{
		s_QuitUpdateThread = true;
		s_UpdateCondition.notify_one();
	}
}
 
void MaClasse::RemoveUpdateThreadKO()
{
	bool s_QuitUpdateThreadCpy;
	{
	scoped_lock lock(s_LaunchUpdateMutex);
	s_QuitUpdateThreadCpy = s_QuitUpdateThread;
	}
 
	if( !s_QuitUpdateThreadCpy )
	{
		{
		scoped_lock lock(s_LaunchUpdateMutex);
		s_QuitUpdateThread = true;
		s_UpdateCondition.notify_one();
		}
 
		s_ThreadUpdatePtr->join();	// Le programme bloque ici et le thread ne s'arrête pas
	}
}
Pour faire simple, je ne comprend pas pourquoi la fonction RemoveUpdateThreadKO() ne fonctionne pas alors que le mutex n'est pas bloqué et que je notifie la condition...
Merci d'avance, bonne journée