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;
See my Visual C++ Programmer Stuff page for more C++ stuff.