Je viens de me heurter à un deadlock avec ce programme :

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
#include <Windows.h>

DWORD WINAPI EntryPoint( void * )
{
	MSG msg;
	while ( GetMessage( &msg, NULL, 0, 0 ) )
	{
	}

	return 0;
}

int WINAPI WinMain( HINSTANCE hInstance,
    HINSTANCE hPrevInstance,
    LPSTR lpCmdLine,
    int nCmdShow )
{
	DWORD id;
	HANDLE th = CreateThread( NULL, 0, EntryPoint, NULL, 0, &id );
		
	//Sleep( 1000 );

	PostThreadMessage( id, WM_QUIT, 0, 0 );
	
	WaitForSingleObject( th, INFINITE );
}
Le thread créé ne reçoit jamais mon message.
Il suffit que je décommente le Sleep pour que je reçoive toujours mon message.

Alors je me demande dans quelle mesure mon thread est créé s'il n'est pas cappable de recevoir mes messages... Rien n'est dit sur la msdn. Cela m'oblige à instaurer un mécanisme d'attente pour être sûr que mon thread est arrivé à la boucle des messages avant de lui en envoyer.