如何检测线程运行且不影响其他组件使用?
已实现用线程控制进度条,希望在线程事件完成后,关闭程序。
在form1的oncreate事件中,写有一下代码
if WaitForSingleObject(hProcess, INFINITE) = WAIT_OBJECT_0 then application.Terminate;
unit Unit1;interfaceuses Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms, Dialogs;type TForm1 = class(TForm) procedure FormCreate(Sender: TObject); private procedure OnThreadTerminated(Sender: TObject); public { Public declarations } end; TSleepThread = class(TThread) private protected procedure Execute; override; public end;var Form1: TForm1;implementation{$R *.dfm}procedure TForm1.FormCreate(Sender: TObject);var t: TSleepThread;begin t := TSleepThread.Create(True); t.OnTerminate := OnThreadTerminated; t.Resume;end;{ TSleepThread }procedure TSleepThread.Execute;begin Sleep(5000);end;procedure TForm1.OnThreadTerminated(Sender: TObject);begin Application.Terminate;end;end.
[解决办法]
嗯,楼上不错
[解决办法]
因为你一直在等待线程是否执行完成,所以使整个程序出现假死现象,可以写个循环把等待的时间改为100ms,如果返回WAIT_OBJECT_0才终止程序,否则响应其它消息,如下:
while True do begin if WaitForSingleObject(hProcess, 100) = WAIT_OBJECT_0 then begin application.Terminate; Break; end else application.ProcessMessages; end;