我在主TForm中有一个TButton。当用户点击该按钮时,它将执行以下过程:
begin
Process_done := FALSE;
Process_Result.Clear;
cmdProcess.CommandLine := #34+AppPath+'getdata.exe"';
cmdProcess.Run;
Repeat
Application.ProcessMessages;
Until Process_done;
end;正如您在上面看到的,该进程调用外部可执行文件,并且该进程需要花费一些时间来阻塞主应用程序。
这只是一个进程,我需要另一个进程。
因此,我正在考虑实现多线程,这样我就可以在单独的线程中运行上面的进程。另一个过程也是如此。并且主线程可以在检查两个进程何时完成的同时执行某些操作。
有谁能给我举一些使用Delphi 7的例子吗?
或者给我推荐一篇文章,像这样简单的实现?
谢谢。
发布于 2012-03-09 17:05:27
尝试如下所示:
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;发布于 2012-03-09 17:04:05
您应该创建一个继承自TThread的类,并将代码放入其中。我记不清了,但我想你可以在文件->新建对话框中找到TThread模板。当代码执行完成时,您只需通知您的gui即可。这是一篇如何将UI与外部线程http://delphi.about.com/od/kbthread/a/thread-gui.htm同步的文章
https://stackoverflow.com/questions/9630686
复制相似问题