Performance 在运行时动态创建delphi计时器(性能、cpu消耗)

Performance 在运行时动态创建delphi计时器(性能、cpu消耗),performance,delphi,timer,runtime,Performance,Delphi,Timer,Runtime,在我当前的项目中,我的结构如下: Main Thread (GUI): ->Parser Thread ->Healer Thread ->Scripts Thread ->Parser Thread ->Healer Thread: -->Healer 1 -->Healer 2 --> (...) ->Scripts Thread: -->Script 1 --> (...) 问题是,Healer&Scripts线程必须

在我当前的项目中,我的结构如下:

Main Thread (GUI):
->Parser Thread
->Healer Thread
->Scripts Thread
->Parser Thread
->Healer Thread:
-->Healer 1
-->Healer 2
--> (...) 
->Scripts Thread:
-->Script 1
--> (...)
问题是,Healer&Scripts线程必须使用适当的计时器创建子线程,如下所示:

Main Thread (GUI):
->Parser Thread
->Healer Thread
->Scripts Thread
->Parser Thread
->Healer Thread:
-->Healer 1
-->Healer 2
--> (...) 
->Scripts Thread:
-->Script 1
--> (...)
为此,我考虑了编写一个动态计时器,该计时器将在添加新的Heal/脚本时在运行时创建

现在的问题是: 也许因为这个原因,我有20个定时器同时运行,这对我的程序性能(CPU消耗等)不是一个问题吗? 这是实现我所追求目标的最佳方式吗


提前感谢

在一个应用程序中一次最多激活20个计时器没有问题。现代硬件完全有能力处理这一问题

还请记住,计时器消息是低优先级消息,因此只有在消息队列为空时才会合成。因此,您需要及时维护线程的消息队列,以便及时传递消息


对您来说,更大的问题是无法在GUI/VCL线程之外创建
TTimer
实例。这是因为计时器组件调用的
AllocateHWnd
不是线程安全的,只能从GUI/VCL线程调用。因此,您需要直接与原始Win32 timer API交互,而不要使用VCL
TTimer
包装器。

20个计时器根本不是问题。作为替代方案,您可以使用函数创建计时器,并使用一个通用的
WM\u计时器
消息处理程序。等等,你想把计时器放在哪里?在线程中?如果你已经知道线程,为什么还要费心使用计时器呢?将适当的线程放到
Sleep
,瞧。@user539484那么我应该创建一个新线程(ScriptsThreadChild)来管理ScriptsThread创建的子线程吗?如果这是正确的,我可以根据需要多次运行ScriptsThreadChild.execute()吗?例如,如果子线程将在同一ScriptThreadChild.pas下并行运行,为什么不使用计时器队列?它们基于操作系统线程池:甚至在线程内使用原始Win32定时器API。有关解决方法,请查看:-)@user2308704。您可以从任何线程调用
SetTimer
,但如果这样做,则必须在该线程上服务消息队列。我已经创建了系统事件(您可以想象为一个开关),该事件可以是有信号的,也可以是无信号的。我正在等待该事件在指定时间内(在该示例中为2000ms)通过
WaitForSingleObject
函数发出信号。如果在此期间未发出该事件的信号,
WaitForSingleObject
返回
WAIT\u TIMEOUT
值。如果它处于信号状态,则返回
WAIT\u OBJECT\u 0
。并且它仅通过调用
FinishThreadExecution
方法发出信号。否则,它总是会阻止那些2000ms的
WaitForSingleObject
函数上线程的执行。对不起,我正在查找有关@user539484所说内容的信息。非常感谢所有人,也感谢特拉玛的解释(我花了很多时间试图理解539484所说的,但很少有成果。当事情变得棘手时,期待着隐晦的评论和沉默。