【发布时间】:2016-03-16 15:10:47
【问题描述】:
我的项目包含两个执行不同任务的过程, 我在计时器中执行每个线程。
我的问题是......当我运行项目时,计时器开始了。 线程不能正常工作。
为什么?
而且,我可以在同一个项目中使用两个或更多线程吗?
注意:我很想用线程,我需要一个线程的解决方案。
这是我的无线程代码。
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.
有线程:
type
TThread_Timer2 = class(TThread)
protected
procedure Execute; override;
end;
type
TThread_Timer3 = class(TThread)
protected
procedure Execute; override;
end;
procedure TThread_Timer2.Execute;
var
i : integer;
begin
for i := 0 to 50 do
begin
Memo1.Lines.Add(IntToStr(i));
sleep(500);
end;
end;
procedure TThread_Timer3.Execute;
var
k : integer;
begin
for k := 0 to 50 do
begin
Memo2.Lines.Add(IntToStr(k));
sleep(500);
end;
end;
procedure TForm1.Timer2Timer(Sender: TObject);
var
thd : TThread_Timer2;
begin
thd := TThread_Timer2.Create(true);
try
thd.FreeOnTerminate := true;
thd.Priority := tpHighest;
finally
thd.Resume;
end;
end;
procedure TForm1.Timer3Timer(Sender: TObject);
var
trhd : TThread_Timer3;
begin
trhd := TThread_Timer3.Create(true);
try
trhd.FreeOnTerminate := true;
trhd.Priority := tpHighest;
finally
trhd.Resume;
end;
end;
【问题讨论】:
-
Idk 如果这是您的问题的原因(您应该详细说明“线程无法正常工作”),但您的代码中肯定存在问题:您正在从工作线程更新 UI。 UI 操作必须发生在主线程上。请参阅
Synchronize了解更多信息。
标签: multithreading delphi delphi-xe7