Multithreading 我想在delphi中同时做两件事,例如,同时运行两个计时器事件

Multithreading 我想在delphi中同时做两件事,例如,同时运行两个计时器事件,multithreading,delphi,timer,Multithreading,Delphi,Timer,我想在delphi中同时做两件事,例如,两个计时器同时运行,,,如何使用一个方法呢 例如,让我们看看这个简单的例子,这里有两个计时器,这些计时器连续运行,但是我想同时运行计时器,但是如何运行呢 procedure TForm1.Button1Click(Sender: TObject); begin if Button1.Caption = 'START' then begin Timer1.Enabled := True; Timer2.Enabled := True; B

我想在delphi中同时做两件事,例如,两个计时器同时运行,,,如何使用一个方法呢

例如,让我们看看这个简单的例子,这里有两个计时器,这些计时器连续运行,但是我想同时运行计时器,但是如何运行呢

procedure TForm1.Button1Click(Sender: TObject);

begin

if Button1.Caption = 'START' then
  begin
  Timer1.Enabled := True;
  Timer2.Enabled := True;
  Button1.Caption := 'FINISH'
  end
else if Button1.Caption = 'FINISH' then
  begin
  Timer1.Enabled := False;
  Timer2.Enabled := False;
  Button1.Caption := 'START';
  end;
end;

procedure TForm1.Timer1Timer(Sender: TObject);
var
i : integer;
begin
for i := 0 to 50 do
  begin
  Memo1.Lines.Add(IntToStr(i));
  sleep(500);
  end;
end;

procedure TForm1.Timer2Timer(Sender: TObject);
var
k : integer;
begin
for k := 0 to 50 do
  begin
  Memo2.Lines.Add(IntToStr(k));
  sleep(500);
  end;
end;

end.

不要在
TTimer.OnTimer
处理程序中调用
Sleep
。相反,将yout timer interval设置为500,它将每500毫秒触发一次。两个定时器都会启动,你会感觉到两个东西同时运行


但是,这是一个ilusion,因为两个代码都在同一个线程(主线程)内运行,但根据您的要求,这种行为可能是可以接受的。

不要在
TTimer.OnTimer
处理程序内调用
Sleep
。相反,将yout timer interval设置为500,它将每500毫秒触发一次。两个定时器都会启动,你会感觉到两个东西同时运行

但是,这是一个ilusion,因为两个代码都在同一个线程(主线程)内运行,但是根据您的需求,这种行为可能是可以接受的

“我想同时运行计时器,,,但如何运行?”

这是不可能的

主线程中的所有内容都以一个顺序运行。 即使使用计时器,也无法同时运行两个过程

主线程的空闲部分检查消息队列中的消息。 他们一个接一个地处理。这就是调用计时器事件时发生的情况。 在计时器事件的执行过程中,主线程只执行此事件

因此,请注意计时器事件代码的复杂性,并保持其简短

如果您想要更好的多任务处理性能(或者您的计时器事件太复杂),则必须使用。 线程使用自己的堆栈与主线程“并行”执行。 如何解释并行性取决于操作系统以及CPU的内核数量

如果没有适当的保护,从线程访问VCL部件是不可能的,例如。 这意味着线程将等待,直到在主线程中执行了同步部分。 还可以从要在主线程中执行的线程异步发送消息

您可以在Delphi示例中找到多线程的示例

“我想同时运行计时器,,,但如何运行?”

这是不可能的

主线程中的所有内容都以一个顺序运行。 即使使用计时器,也无法同时运行两个过程

主线程的空闲部分检查消息队列中的消息。 他们一个接一个地处理。这就是调用计时器事件时发生的情况。 在计时器事件的执行过程中,主线程只执行此事件

因此,请注意计时器事件代码的复杂性,并保持其简短

如果您想要更好的多任务处理性能(或者您的计时器事件太复杂),则必须使用。 线程使用自己的堆栈与主线程“并行”执行。 如何解释并行性取决于操作系统以及CPU的内核数量

如果没有适当的保护,从线程访问VCL部件是不可能的,例如。 这意味着线程将等待,直到在主线程中执行了同步部分。 还可以从要在主线程中执行的线程异步发送消息


您可以在Delphi示例中找到多线程的示例。

什么是“两个计时器”?通常,一次做两件事的方法是一次运行两个线程,尽管根据您的系统,它们可能看起来只是同时运行。搜索SO或Google中的Delphi线程示例将有所帮助。除此之外,你能更详细地解释你想做什么吗?你的问题毫无意义。您需要花一些时间来理清思路,并提出一个真正的问题。---两个计时器或在两个不同的代码中同时运行,我正在查看线程上的示例,但我找不到两个不同计时器如何同时运行的示例。我对此不太了解,如果您能帮助我,我将不胜感激。@Muammer,在问题中发布您的代码。重复:另:otl.17slon.com/‎什么是“双定时器”?通常,一次做两件事的方法是一次运行两个线程,尽管根据您的系统,它们可能看起来只是同时运行。搜索SO或Google中的Delphi线程示例将有所帮助。除此之外,你能更详细地解释你想做什么吗?你的问题毫无意义。您需要花一些时间来理清思路,并提出一个真正的问题。---两个计时器或在两个不同的代码中同时运行,我正在查看线程上的示例,但我找不到两个不同计时器如何同时运行的示例。我对此不太了解,如果您能帮助我,我将不胜感激。@Muammer,在问题中发布您的代码。重复:另:otl.17slon.com/‎我之所以称之为sleep,是因为它不能同时在屏幕上查看计时器1和计时器2。所以“睡眠”并不重要,同时工作对我来说什么是重要的timers@Muammer:好的,正如我所说,使用两个计时器模拟两个线程(同时执行两行)有几个限制。它要求TTimer.OnTimer中的代码非常快,因为当它运行时,其他任何东西都不会,包括另一个计时器。继续做你的实验,但我建议你认真对待研究线程的想法。我称之为睡眠,因为它不能同时在屏幕上查看计时器1和计时器2。所以“睡眠”并不重要,在sa工作对我来说什么是重要的