T.T*_*.T. 7 c c++ windows algorithm winapi
Windows API/C/C++
1. ....
2. ....
3. ....
4. while (flag1 != flag2)
5. {
6. SleepEx(100,FALSE);
//waiting for flags to be equal (flags are set from another thread).
7. }
8. .....
9. .....
Run Code Online (Sandbox Code Playgroud)
如果标志在7秒后不相等,我想继续第8行.
任何帮助表示赞赏.谢谢.
Jar*_*Par 10
如果您正在等待设置特定标志或达到时间,则更清洁的解决方案可能是使用自动/手动重置事件.这些设计用于线程之间的信令条件,并且具有在其上设计的非常丰富的API.例如,您可以使用WaitForMultipleObjects API,它采用显式超时值.
不要轮询要更改的标志.即使在循环期间出现睡眠或产量,这也只会浪费CPU周期.
相反,获取设置标志的线程会发出信号通知您已经更改过,可能是使用了一个事件.你等待事件需要超时,你可以调整以允许等待7秒.
例如:
Thread1:
flag1 = foo;
SetEvent(hEvent);
Thread2:
DWORD timeOutTotal = 7000; // 7 second timeout to start.
while (flag1 != flag2 && timeOutTotal > 0)
{
// Wait for flags to change
DWORD start = GetTickCount();
WaitForSingleObject(hEvent, timeOutTotal);
DWORD end = GetTickCount();
// Don't let timeOutTotal accidently dip below 0.
if ((end - start) > timeOutTotal)
{
timeOutTotal = 0;
}
else
{
timeOutTotal -= (end - start);
}
}
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
16891 次 |
| 最近记录: |