Delphi 7:如何实现多线程?

Kaw*_*hii 1 delphi multithreading 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;
Run Code Online (Sandbox Code Playgroud)

如上所示,该进程调用外部可执行文件,该进程可能需要一些时间来阻止主应用程序.

这只是一个过程,我需要另一个过程.

所以,我正在考虑实现多线程,我可以在一个单独的线程中运行上面的过程.另一个过程也是如此.并且主线程可以在检查两个进程何时完成时执行某些操作.

谁能给我一些使用Delphi 7如何做到这一点的例子?

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

谢谢.

Rem*_*eau 13

尝试这样的事情:

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;
Run Code Online (Sandbox Code Playgroud)

.

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;
Run Code Online (Sandbox Code Playgroud)

  • 你现在已经知道了很多麻烦,但还不够.但是没有更好的学习方法(我知道)然后体验线程,竞争条件,死锁,资源争用以及VCL的非线程安全特性的乐趣,而不是自己体验它.你刚跳下兔子洞.它非常深入. (10认同)