multithreading - 等待事件,但至少等待指定时间
问题描述
目前,我想出了以下代码:
先决条件:
CONST MinTime = 1000; // ms //
VAR ObjHandle : THandle := CreateEvent(NIL,TRUE,FALSE,'Event');
VAR T : LongWord;
VAR Signalled : BOOLEAN;
代码:
T:=GetTickCount; Signalled:=FALSE;
REPEAT
CASE WaitForSingleObject(ObjHandle,MinTime) OF
WAIT_OBJECT_0 : Signalled:=TRUE
END
UNTIL Signalled AND (GetTickCount-T>=MinTime);
这段代码的目的是等待外部信号事件(来自另一个线程),但每秒最多只响应一次。这是实现此功能的正确方法,还是有更优化(CPU 资源方面)的方法?
解决方案
您可以使用 2 个对象等待。一是事件。另一个是设置为所需睡眠间隔的一次性等待计时器。然后使用WaitForMultipleObjects()
withbWaitAll=TRUE
等待两个对象都发出信号,不需要循环。
推荐阅读
- javascript - 使用 for 循环更改对象中的所有键值对
- android - 检查文件路径上是否存在视频
- javascript - 在 CSS 的情况下如何更改 Ace-editor 的行为?
- ios - 如何从最近在 iOS 的 IAPHelper 中购买的应用商店获取单个产品收据?
- google-app-engine - 如何使用 Go 运行时将 exe 文件复制到 App Engine (flex)?
- apache - Apache SSL 验证权限设置
- sql-server - 当参数值具有“&”时,将参数传递给 SSRS url 问题
- r - 如何从R中的大集合中排除一个集合
- android - 网格未占用全宽
- javascript - 如何获得引导的输出?