windows – 除非收到消息,否则有没有办法入睡?
发布时间:2020-12-14 05:38:01 所属栏目:Windows 来源:网络整理
导读:我正在使用一个主循环看起来像这样的服务: while (fServer.ServerState = ssStarted) and (Self.Terminated = false) dobegin Self.ServiceThread.ProcessRequests(false); ProcessFiles; Sleep(3000); end; ProcessRequests与Application.ProcessMessages
我正在使用一个主循环看起来像这样的服务:
while (fServer.ServerState = ssStarted) and (Self.Terminated = false) do begin Self.ServiceThread.ProcessRequests(false); ProcessFiles; Sleep(3000); end; ProcessRequests与Application.ProcessMessages非常相似.我无法传递真实,因为如果我这样做,它会阻塞,直到从Windows收到消息,并且ProcessFiles将无法运行,并且它必须不断运行. Sleep可以降低CPU使用率. 这工作正常,直到我尝试从Windows的服务管理列表关闭服务.当我点击Stop时,它会发送一条消息,并希望几乎立即得到一个响应,如果它在Sleep命令的中间,Windows会给我一个错误,该服务没有响应Stop命令. 所以我需要说的是“睡觉3000或直到你收到消息,以先到者为准”.我确定有一个API,但我不确定它是什么.有人知道吗? 解决方法
使用计时器运行ProcessFiles而不是将其入侵主应用程序循环.然后ProcessFiles将以您想要的间隔运行,并且消息将被正确处理,而不是占用100%的CPU.
(编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |
相关内容
- windows – 允许非管理员以管理员身份运行程序(如setuid位)
- wpf – 如何从字节数组创建System.Windows.Media.ImageSour
- group-policy – 是否可以将Windows Update配置为通过组策略
- 如何映射哪个卷位于Windows中的哪个分区?
- windows-7 – 在Windows 7 RC上安装.NET 3.5 SP1
- Windows线程调度程序是不公平的?
- Windows API—CreateEvent—创建事件
- .net – 不支持ScrollViewer中的ISupportIncrementalLoadin
- windows-server-2003 – 我的AD已经是LDAP服务器吗?
- windows – 如何拦截dll方法调用?