如题。
稍微解释下,因为有可能有人会误会:放新线程里面去不就可以了?这没有解决问题。如此的话,你那个线程函数怎么写?或者线程函数里调用的某个任务函数怎么写?总之,多线程虽然总是出现在这些问题的解决方案中,但不是多线程解决了这个问题。嗯……不知道说清楚了没?
目前我心里的答案只有这一种模式:
bool DoTask(HANDLE hQuitSignal)
{
while (!QuitCondition)
{
if (WaitForSingleObject(hQuitSignal, 0) == WAIT_OBJECT_0)
{
return false;
}
// Do something
}
return true;
}
其中,“// Do something”部分要细化到瞬间执行完成的细度。
但是我很困惑的是,如果这些任务很繁重,难道我必须每进行一些操作就 if (WaitForSingleObject(hQuitSignal, 0) == WAIT_OBJECT_0) 检查下吗?这样岂不是这种检测代码充斥在任务中了?
不知各位有何经验和体会,求教~
我的作法是这样 你的xlLib 真不错 我很喜欢的风格
HANDLE GetSleepHandle()
{
static DWORD dwSleepTls = 0;
if ( !dwSleepTls )
{
dwSleepTls = TlsAlloc();
}
HANDLE hSleep = (HANDLE)TlsGetValue(dwSleepTls);
if ( !hSleep )
{
hSleep = CreateEvent(NULL, TRUE, FALSE, NULL);
TlsSetValue(dwSleepTls, hSleep);
}
return hSleep;
}
BOOL MySleep(DWORD dwMil)
{
HANDLE hSleep = GetSleepHandle();
if( WaitForSingleObject(hSleep, dwMil) == WAIT_TIMEOUT )
{
return TRUE;
}
return FALSE;
}