Delphi 7:如何实现多线程?

时间:2012-03-09 07:59:28

标签: multithreading delphi delphi-7

我在主要的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进行此操作吗?

或者我指的是一篇文章,这样的简单实现?

感谢。

2 个答案:

答案 0 :(得分:12)

尝试这样的事情:

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;

答案 1 :(得分:0)

您应该创建一个从TThread继承的类并将该代码放在那里。我不记得确切,但我想你会在File-> New对话框中找到TThread模板。代码执行完成后,您只需通知您的gui。这是一篇如何将UI与外部线程http://delphi.about.com/od/kbthread/a/thread-gui.htm

同步的文章