在进行Windows编程时,经常需要使用Sleep()这个Windows标准API函数来实现延时等待。但该线程的最大问题在于,调用了Sleep后,整个线程全部被挂起。也不能处理Windows消息。
TfxSleep解决该问题。实现卡住等待超时的同时,可以处理Windows消息。
// 延时 ?时间, 期间能处理Windows事件
VOID TfxSleep(ULONG ulMilliSeconds)
{
DWORD lFirst = GetTickCount();
MSG msg;
do
{
if(PeekMessage(&msg,NULL, 0, 0, PM_REMOVE))
{
TranslateMessage( &msg );
DispatchMessage( &msg );
}
Sleep(1);
} while (GetTickCount() - lFirst < ulMilliSeconds);
}
一个朋友(Loki.W.Zuo )曾经看了该贴留言说:
还有一种方法是使用锁机制(在windows下可以使用临界资源对象),自己锁自己,然后由别人释放。
优点是:主动请求进程/线程切换。