Fonctionnement de PumpMessages
Bonjour,
J'ai une question sur le fonctionnement de la fonction décrite PumpMessages décrites dans la F.A.Q.
fonction PumpMessages:
Code:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16
|
void CTempsReelDlg ::PumpMessages()
{
// Handle dialog messages
MSG msg;
while(PeekMessage(&msg, NULL, 0, 0, PM_REMOVE))
{
if (!AfxGetApp()->PreTranslateMessage(&msg))
{
::TranslateMessage(&msg);
::DispatchMessage(&msg);
}
AfxGetApp()->OnIdle(0); // updates user interface
AfxGetApp()->OnIdle(1); // frees temporary objects
}
} |
J'ai un thread dans une classe Dlg, dans celui-ci il y a un appel à la fonction PostMessage. Lorsque je fais appel à la fonction PumpMessages dans le thread, le message n'est pas reçu immédiatement (il faut attendre que d'autres threads de travail qui tournent en même temps soient finis) :
Code:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23
|
DWORD WINAPI CTempsReelDlg::PompeMsg(LPVOID pvParam)
{
CTempsReelDlg *pThis=reinterpret_cast< CTempsReelDlg *>( pvParam);
::PostMessage(pThis->hWnd,WM_FINCALCUL,0,0);
pThis->PumpMessages();
return 0;
}
void CTempsReelDlg::OnStart()
{
hWnd = GetSafeHwnd();
HANDLE hThread;
hThread=CreateThread(NULL,0,PompeMsg,this,0,NULL);
// PumpMessages();
CloseHandle(hThread);
}
void CTempsReelDlg::OnReceiveFinCalcul(WPARAM wparam, LPARAM lparam)
{
m_cListe.AddString(_T("essai"));
} |
Alors que lorsque je fais appel à la fonction PumpMessages en dehors du thread, le message est bien reçu immédiatement (pendant le fonctionnement des autres threads de travail):
Code:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18
|
DWORD WINAPI CTempsReelDlg::PompeMsg(LPVOID pvParam)
{
CTempsReelDlg *pThis=reinterpret_cast< CTempsReelDlg *>( pvParam);
::PostMessage(pThis->hWnd,WM_FINCALCUL,0,0);
// pThis->PumpMessages();
return 0;
}
void CTempsReelDlg::OnStart()
{
hWnd = GetSafeHwnd();
HANDLE hThread;
hThread=CreateThread(NULL,0,PompeMsg,this,0,NULL);
PumpMessages();
CloseHandle(hThread);
} |
Voyez -vous où est la subtilité?
Merci d'avance