The documentation of the CEvent
is not as clear as it could be. The following is an outline for one possible use of it.
This example could be used in a class that creates a thread, such as a worker thread
created by AfxBeginThread, to signal it is time for the thread to complete
In the class, create a pointer to an event item and to a thread and declare the thread
procedure:
CEvent *m_pEvent;
CWinThread *m_pThread;
static UINT ThreadProc(CFileMonitorApp *);
In the constructor, initialize them:
m_pEvent = NULL;
m_pThread = NULL;
Then create the event item and the thread:
m_pEvent = new CEvent;
if (!m_pEvent)
return false;
m_pEvent->ResetEvent(); // Not necessary?
m_pThread = AfxBeginThread((AFX_THREADPROC)ThreadProc, (LPVOID)this);
if (!m_pThread)
return false;
The thread then waits for it to happen. You might need to specify a
time-out interval shorter than INFINITE. Alternatively, you can use a
time-out interval of zero and periodically check to see if it is time: It is
usually important to check the WaitForSingleObject Return Value.
UINT CEventApp::ThreadProc(CFileMonitorApp *pApp) {
DWORD ReturnValue;
ReturnValue = WaitForSingleObject(pApp->m_pEvent->m_hObject, INFINITE);
return 0;
}
When it is time for the thread to end:
m_pEvent->SetEvent();
ReturnValue = WaitForSingleObject(m_pThread->m_hThread, INFINITE);
delete m_pEvent;