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
|
volatile bool ready;
HANDLE threadH;
DWORD threadId;
/* point d'entree du thread */
DWORD WINAPI WaitingDlg::ThreadProc( LPVOID lpParameter)
{
HWND hDlg=(HWND)lpParameter;
HWND dialogHandle=CreateDialog(hInst, (LPCTSTR)IDD_WAITING, hDlg , (DLGPROC)WaitingDlg::callBack);
ShowWindow(dialogHandle,SW_SHOW);
ready=true;
MSG msg;
while( GetMessage(&msg,NULL,0,0)==TRUE ){
if( msg.message==ID_END_DIAG ){
EndDialog(dialogHandle, 0);
return 0;
}
TranslateMessage(&msg);
DispatchMessage(&msg);
}
return 0;
}
/* demarage du thread */
void WaitingDlg::doModal(HWND hDlg){
ready=false;
threadH=CreateThread(NULL,0,ThreadProc,(LPVOID)hDlg,0,&threadId);
}
/* arret du thread */
void WaitingDlg::stop(void){
if( threadH==NULL )
return;
while( !ready )
Sleep(5);
PostThreadMessage(threadId,ID_END_DIAG,0,0);
CloseHandle(threadH);
} |
Partager