正如您所知,我使用Delphi 2010开发的应用程序中的TTimer VCL组件有点麻烦。
每当我打电话:
Self.Timer1.Enabled := False;
Self.Timer1.Enabled := True;
计时器组件似乎确实停止了,但是,它永远不会再次启动。就像,它从不调用OnTimer事件。
我将它与Indy10 IRC组件(TIdIRC)结合使用。
提前致谢:)
答案 0 :(得分:6)
你也知道大多数Indy的电话都在封锁吗?计时器通过发送Windows消息来工作,这意味着需要处理消息才能启动计时器。如果应用程序/主线程阻塞它不处理消息,定时器不会被触发。也许这是你的问题?
此外,如果您的应用程序是Windows服务或控制台应用程序,则可能无法处理消息。
答案 1 :(得分:2)
将Indy从等式中拿出来,看看你是否可以让它基本上每10秒抛出一次提示。如果没有,你做错了什么。就像误解间隔时间一样。例如,“(10000/10秒)”不是很清楚。我认为你的意思是“10000毫秒,这是10秒”,但你没有显示你的代码,所以我只能猜测。德尔福不会猜测,它会做你所说的。 无论如何,使用表单,按钮,编辑框和ttimer和实验制作一个示例应用程序。在介绍Indy之前,让计时器工作正常。然后你知道你是否有TTimer问题或Indy问题。
答案 2 :(得分:1)
您必须确保仅在主线程的上下文中调用TTimer
的这些方法。由于Indy使用线程,很可能会违反此规则。为了便于查找,当代码在另一个线程的上下文中执行时,您可以调用Assert
:
Assert(GetCurrentThreadId = MainThreadId);
Self.Timer1.Enabled := False;
Self.Timer1.Enabled := True;
我不知道您的代码中Self
指的是什么,但值得尝试。
答案 3 :(得分:0)
我在一个单独的线程中创建了一个Timer,一切都运行良好:)
谢谢大家,我学到了很多东西。