一次性定时器

ELC*_*ouz 8 delphi serial-port timer command-line-interface

亲爱的德尔福程序员,

我正在寻找帮助如何编写一次性定时器(没有GUI,所以VCL定时器无可置疑)......

让我再解释一下.

在我的代码中(用VCL计时器解释但在这个特定项目中我没有表格):

  1. 调用procedure通过串口发送char的a
  2. 启用X量为的计时器 Interval

OnTimer事件中:

我有一个代码发送一个字符然后禁用计时器本身永远不会再次执行.

问题是我需要使这些计时器的创建动态化.我想到了函数SetTimer()然后KillTimer()在"OnTimer事件"中禁用它(释放它).

这是一种好的(安全的)方式吗?

谢谢!

TLa*_*ama 15

从计时器事件中杀死计时器是否安全?

是的,那是非常安全的.

如何实现最简单的一次性计时器?

最简单的1秒单击计时器的实现就是这个,但是请注意,如果你开始更多它们,你将无法区分它们中的哪一个经过了它的间隔:

procedure TimerProc(hwnd: HWND; uMsg: UINT; idEvent: UINT_PTR;
  dwTime: DWORD); stdcall;
begin
  KillTimer(0, idEvent);
  ShowMessage('I''m done!');
end;

procedure TForm1.Button1Click(Sender: TObject);
begin
  SetTimer(0, 0, 1000, @TimerProc);
end;
Run Code Online (Sandbox Code Playgroud)

  • 问题是没有GUI,在这种情况下你不一定会假设会有一个消息循环.基本Windows计时器需要消息循环. (4认同)
  • +1你的答案不能比那更清楚和准确!谢谢!希望这能帮助别人:) (2认同)
  • 别客气!只是一个旁注; 当我们谈论`TTimer`类及其经常使用的`OnTimer`事件禁用时,内部发生相同的事情.实际上,每当你改变`Enabled`属性的状态时,定时器首先被`KillTimer`函数杀死,新的定时器可选地由`SetTimer`函数创建.所以,这是从`OnTimer`事件中真实使用`KillTimer`的一个例子. (2认同)