【发布时间】:2010-07-28 17:38:38
【问题描述】:
我在一个主循环如下所示的服务中工作:
while (fServer.ServerState = ssStarted) and (Self.Terminated = false) do
begin
Self.ServiceThread.ProcessRequests(false);
ProcessFiles;
Sleep(3000);
end;
ProcessRequests 很像Application.ProcessMessages。我不能将true 传递给它,因为如果我这样做了,它就会阻塞,直到收到来自 Windows 的消息,并且 ProcessFiles 不会运行,它必须不断运行。睡眠可以降低 CPU 使用率。
在我尝试从 Windows 的服务管理列表中关闭该服务之前,这一切正常。当我点击 Stop 时,它会发送一条消息并期望几乎立即得到响应,如果它在 Sleep 命令的中间,Windows 会给我一个错误,表明该服务没有响应 Stop 命令。
所以我需要说“睡眠 3000 或直到您收到消息,以先到者为准。”我确定有一个 API,但我不确定它是什么。有人知道吗?
【问题讨论】:
-
我在我的服务中就是这样做的,但要保持睡眠时间短。 CPU 仍然被调度程序保持关闭。尝试睡眠(500)
-
您想在收到消息之前在后台线程中睡觉,或者您想冻结您的前台线程?在这里启发我。
-
你可以试试 SleepEx 或 WaitForMultipleObjects,正如 Jeroen 建议的那样。 SleepEx 专为可中断睡眠而设计。
标签: windows delphi winapi service