Delphi 7:如何实现多线程?
问题描述:
我在主TForm中有一个TButton。当用户点击该按钮,将执行以下过程:Delphi 7:如何实现多线程?
begin
Process_done := FALSE;
Process_Result.Clear;
cmdProcess.CommandLine := #34+AppPath+'getdata.exe"';
cmdProcess.Run;
Repeat
Application.ProcessMessages;
Until Process_done;
end;
正如你可以在上面看到,该进程调用外部可执行文件,并且该过程可能需要一些时间,这阻止主应用程序。
这只是一个过程,而我需要另一个过程。
所以,我想实现多线程,我可以在单独的线程中运行上述过程。另一个过程也是如此。当两个进程完成时,主线程可以执行某些操作。
任何人都可以给我一些例子如何使用Delphi 7做到这一点?
或指向我的文章,这样的简单实现?
谢谢。
答
尝试这样同步:
type
TRunProcessThread = class(TThread)
protected
cmdProcess: Whatever;
procedure Execute; override;
public
constructor Create(const ACmdLine: String);
destructor Destroy; override;
end;
constructor TRunProcessThread.Create(const ACmdLine: String);
begin
inherited Create(True);
FreeOnTerminate := True;
cmdProcess := Whatever.Create;
cmdProcess.CommandLine := ACmdLine;
end;
destructor TRunProcessThread.Destroy;
begin
cmdProcess.Free;
inherited;
end;
procedure TRunProcessThread.Execute;
begin
cmdProcess.Run;
...
end;
。
procedure TForm1.Button1Click(Sender: TObject);
var
Thread: TRunProcessThread;
begin
Thread := TRunProcessThread.Create(AnsiQuotedStr(AppPath + 'getdata.exe', #34));
Thread.OnTerminate := ProcessDone;
Thread.Resume;
end;
procedure TForm1.ProcessDone(Sender: TObject);
begin
// access TRunProcessThread(Sender) to get result information as needed ...
end;
答
您应该创建一个从TThread继承的类并将该代码放在那里。我不记得确切,但我想你会在File-> New对话框中找到TThread模板。代码执行完成后,您只需通知您的gui。这里有一个文章如何UI带外螺纹http://delphi.about.com/od/kbthread/a/thread-gui.htm
谢谢!这就是我实际需要的:) – ewlung 2012-03-09 10:03:02
现在你已经足够了解了很多麻烦,但还不足以脱身。但是,没有更好的学习方法(我知道),然后体验线程,竞争条件,死锁,资源争用以及VCL的非线程安全特性的乐趣,而不是亲自体验它。你刚刚跳下兔子洞。它非常深入。 – 2012-03-10 17:06:13