首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Delphi 7:如何实现多线程?

Delphi 7:如何实现多线程?
EN

Stack Overflow用户
提问于 2012-03-09 15:59:28
回答 2查看 17.8K关注 0票数 2

我在主TForm中有一个TButton。当用户点击该按钮时,它将执行以下过程:

代码语言:javascript
复制
begin
  Process_done := FALSE;

  Process_Result.Clear;

  cmdProcess.CommandLine := #34+AppPath+'getdata.exe"';

  cmdProcess.Run;

  Repeat
    Application.ProcessMessages;
  Until Process_done;
end;

正如您在上面看到的,该进程调用外部可执行文件,并且该进程需要花费一些时间来阻塞主应用程序。

这只是一个进程,我需要另一个进程。

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

有谁能给我举一些使用Delphi 7的例子吗?

或者给我推荐一篇文章,像这样简单的实现?

谢谢。

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2012-03-09 17:05:27

尝试如下所示:

代码语言:javascript
复制
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;

代码语言:javascript
复制
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;
票数 15
EN

Stack Overflow用户

发布于 2012-03-09 17:04:05

您应该创建一个继承自TThread的类,并将代码放入其中。我记不清了,但我想你可以在文件->新建对话框中找到TThread模板。当代码执行完成时,您只需通知您的gui即可。这是一篇如何将UI与外部线程http://delphi.about.com/od/kbthread/a/thread-gui.htm同步的文章

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/9630686

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档