![]() |
1
2
使用计时器运行processfiles,而不是将其侵入主应用程序循环。然后,processfiles将按所需的间隔运行,消息将得到正确处理,而不会占用100%的CPU。 |
![]() |
2
11
这种东西很难纠正,所以我通常从msdn的api文档开始。 这个 WaitForSingleObject 文件特别指向 MsgWaitForMultipleObjects 对于这些情况:
在
msgwaitformultipleObjects(msgwaitformultipleObjects)
你有一个
编辑 因为评论 Warren P : 如果主循环由于 ReadFileEx , WriteFileEx 或 QueueUserAPC ,然后您可以使用 SleepEx . ——杰罗恩 |
![]() |
3
8
msgwaitformultipleObjects()是一种方法,即:
如果您想以3秒的间隔调用processfiles(),而不管有任何消息到达,那么您可以使用一个可等待的计时器进行调用,即:
|
![]() |
4
1
我在多线程应用程序中使用了一个带有奇怪结果的TTIMER,所以现在我使用事件。
创建活动时使用
现在,最后一件事是在服务停止时触发事件。我认为服务的停止事件是放置这个的正确位置。
我将此代码用于我的数据库连接池系统中的清理线程,但在您的情况下,它也应该工作得很好。 |
![]() |
5
0
您不需要睡眠3整秒来保持低CPU使用率。即使是像sleep(500)这样的东西,也应该使您的使用率保持在很低的水平(如果没有等待处理的消息,那么它应该很快地通过循环并再次进入睡眠状态)。如果循环运行需要几毫秒,那么它仍然意味着线程大部分时间都在睡眠中。 尽管如此,您的代码可能会从一些重构中受益。您说不希望processrequests阻止等待消息?循环中唯一的另一件事是processfiles。如果这取决于正在处理的消息,那么为什么它不能阻止呢?如果它不依赖于正在处理的消息,那么它能被拆分到另一个线程上吗?(前面关于如何通过计时器触发进程文件的建议是一个很好的建议)。 |
![]() |
6
0
使用一个你在线程应该唤醒时发出信号的tevent。然后阻塞tevent(使用waitformultiple,如jeroen所说,如果您有多个事件需要等待) |
![]() |
7
0
是否无法将processfiles移动到单独的线程?在mainthread中,您只需等待消息,当服务终止时,您将终止processfiles线程。 |
![]() |
Some1Else · 函数在Delphi中重新创建TForm 3 年前 |
![]() |
Agmcz · Delphi安卓库。so未安装(AAB) 3 年前 |
![]() |
nader · 如何使用delphi在web上提交表单 7 年前 |
![]() |
kwadratens · Delphi中的卡方分布函数代码 7 年前 |
|
user9672569 · 如何在完整的位图图像中绘制阴影效果? 7 年前 |
![]() |
mmmm · MSBuild(用于Delphi)Make-like功能 7 年前 |