15,471
社区成员
发帖
与我相关
我的任务
分享
DWORD WINAPI ThreadProc(LPVOID lpParameter)
{
GMXX* gm = (GMXX*)lpParameter;
if (WaitForSingleObject(gm->m_readovp.hEvent, MAX_TIMEOUT) == WAIT_OBJECT_0)
{
ResetEvent(gm->m_readovp.hEvent);
if (gm->m_callback)
{
gm->m_callback->ReadCallback(gm->m_data, _tcslen(gm->m_data));
}
}
else
{
CancelIoEx(gm->m_hDevice, NULL);
}
return 0;
}
DWORD DemoThread(LPARAM lParam)
{
THREADINFO *pInfo = (THREADINFO *)lParam;
HANDLE hEvent2[] =
{
pInfo->hExitEvnt, //退出事件。 CreateEvent时用manual-reset方式
pInfo->hDoEvnt //做事事件。CreateEvent时用auto-reset方式
};
BOOL bExitFlag = FALSE;//线程退出标志
while(!bExitFlag)
{
switch(WaitForMultipleObjects(2, hEvent2, FALSE, tmOutTick))
{
case(WAIT_OBJECT_0 + 0)://退出事件
{
//清理退出
bExitFlag = TRUE;
break;
}
case(WAIT_OBJECT_0 + 1)://做事事件
{
//……
break;
}
case(WAIT_TIMEOUT)://超时
{
//处理超时……
break;
}
default://不期望的事件
{
_ASSERT(FALSE);
bExitFlag = -1;
break;
}
}
}
return bExitFlag;
}