15,472
社区成员
发帖
与我相关
我的任务
分享
#include <iostream>
#include <afxmt.h>
using namespace std;
CEvent evt;
UINT __cdecl ThreadStart(LPVOID lParam)
{
for(int i=0; i<10; i++)
{
cout<<"ThreadStart: "<<i<<endl;
Sleep(500);
}
evt.SetEvent();
return 0;
}
UINT __cdecl ThreadClose(LPVOID lParam)
{
WaitForSingleObject(evt.m_hObject, INFINITE);
for(int i=0; i<10; i++)
{
cout<<"ThreadClose: "<<i<<endl;
Sleep(500);
}
return 0;
}
int _tmain(int argc, TCHAR* argv[], TCHAR* envp[])
{
AfxBeginThread(ThreadStart, NULL);
CWinThread* pClose = AfxBeginThread(ThreadClose, NULL);
WaitForSingleObject(pClose->m_hThread, INFINITE);
cout<<"---------End----------"<<endl;
return 0;
}
// The following demonstrates trivial usage of the CEvent class.
// A CEvent object is created and passed as a parameter to another
// thread. The other thread will wait for the event to be signaled
// and then exit
UINT __cdecl MyThreadProc(LPVOID lpParameter)
{
CEvent* pEvent = (CEvent*)(lpParameter);
VERIFY(pEvent != NULL);
// Wait for the event to be signaled
::WaitForSingleObject(pEvent->m_hObject, INFINITE);
// Terminate the thread
::AfxEndThread(0, FALSE);
return 0L;
}
void CEvent_Test()
{
// Create the CEvent object that will be passed to the thread routine
CEvent* pEvent = new CEvent(FALSE, FALSE);
// Create a thread that will wait on the event
CWinThread* pThread;
pThread = ::AfxBeginThread(&MyThreadProc, pEvent, 0, 0, CREATE_SUSPENDED, NULL);
pThread->m_bAutoDelete = FALSE;
pThread->ResumeThread();
// Signal the thread to do the next work item
pEvent->SetEvent();
// Wait for the thread to consume the event and return
::WaitForSingleObject(pThread->m_hThread, INFINITE);
delete pThread;
delete pEvent;
}