Re: MFC and threads
// PostMessage Handler for pause message
LRESULT CMainGui::OnPause(WPARAM w,LPARAM p)
{
Dummy dlg;
// Create an instance of message window
dlg.Create(IDD_DUMMY_DIALOG);
// display the window to display the message, Hello There!, in Edit
control
dlg.ShowWindow(SW_SHOW);
// now window appears with Resume button on bottom-so far so
good
return 0;
}
// Worker Thread Code
LRESULT CMainGuiDlg::WorkerThread(WPARAM , LPARAM)
{
// Executes code below--everything is good
// Some decision making happens and this worker thread code
must pause!
// pause defined as BOOL in CMAINGui header file
pause = TRUE;
// hEvent defined to be of HANDLE datatype in CMainGuiDlg
header file
hEvent = CreateEvent(0, TRUE, TRUE, "MyEvent");
// i check all functions to see if they were successful which
they are(code not listed here)
ResetEvent(hEvent); // set the event state to non-signaled
// OnPause is the message handler ^above^ for UWM_PAUSE message
PostMessage(UWM_PAUSE, 0, 0);
while ( running && paused )
{
if (paused)
{
switch(::WaitForSingleObject(hEvent, 1000))
{
case WAIT_OBJECT_0:
break;
case WAIT_TIMEOUT:
continue;
}
}
}
// Upon clicking Resume in new dialog window execution must start
here!
PostMessage(UWM_STATUS, 0, "Resuming...");
....
....
return 0; // End of Worker thread code
}
void DUMMY::OnResume()
{
// TODO: Add your control notification handler code here
CMainGuiDlg dlg; << Primary window which launched Dummy dialog
Window-i create this data type
so i can acess its member variables,
namely, pause and hEvent
dlg.pause = FALSE; << paused defined in CMainGuiDlg as
BOOL. Since user read the message, user
wants to resume the execution of program so pause is set to FALSE
now.
// sets the state of the specified event object to signaled.
if ( ! ::SetEvent(dlg.hEvent) ) // The event signal is being
processed inside that while loop above
{
AfxMessageBox("SetEvent not successful");
}
// User is done reading the message-Close the window
EndDialog(0);
}