首页 > 解决方案 > 等待事件,但至少等待指定时间

问题描述

目前,我想出了以下代码:

先决条件:

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 资源方面)的方法?

标签: multithreadingdelphieventsdelphi-10.4-sydney

解决方案


您可以使用 2 个对象等待。一是事件。另一个是设置为所需睡眠间隔的一次性等待计时器。然后使用WaitForMultipleObjects()withbWaitAll=TRUE等待两个对象都发出信号,不需要循环。


推荐阅读