15,471
社区成员
发帖
与我相关
我的任务
分享
CTest::StopThread() { SetEvent(m_hExit); if (WaitForSingleObject(hThread,300) == WAIT_TIMEOUT) { TerminateThread(hThread,0); } CloseHandle(hThread); }
这里错了,应该是发起退出事件后,wait线程事件
//开始
CTest::BegThread(){
m_hThread = CreateThread(NULL,0,FuncThread,this,0,NULL);
m_hDoSomething = CreateEvent(NULL,FALSE,FALSE,NULL);
m_hExit = CreateEvent(NULL,FALSE,FALSE,NULL);
}
//线程的全局调用方式,或则说静态调用方式
static DWORD CALLBACK FuncThread(LPVOID lparam);
void _FunThread();
CTest::FuncThread(LPVOID lparam)
{
CTest *pThis = (CTest*)lparam;
pThis->_FunThread();
return 0;
}
CTest::FuncThread(LPVOID lparam)
{
HANDLE hEvent[2] = {hExit,hDoSomething};
while(TRUE)
{
DWORD dwRet = 0;
dwRet = WaitForMultipleObjects(2,hEvent,FALSE,INFINITE);
if (dwRet == WAIT_OBJECT_0)
{
return;//收到退出事件
}
//由于死等事件,能到这里,说明等到了dosomething事件
//做你的事情吧--在这里可以用函数指针,函数指针用法百度去。
//做完了事情会while到WaitForMultipleObjects继续等你的dosomething事件
//或则退出事件
}
//这就达到了线程的简单控制。
//结束线程
}
CTest::StopThread()
{
SetEvent(m_hExit);
if (WaitForSingleObject(m_hExit,300) == WAIT_TIMEOUT)
{
TerminateThread(hThread,0);
}
CloseHandle(hThread);
}
//要在工作就调用这个事件
SetEvent(m_hDoSomething);
//这写都是在类方法里的,没有任何全局的东西