我建立一個類來管理一個執行緒。這個執行緒的結構是
while not terminated do
begin
while (i<條件) do
begin
這里是個執行很長時間的任務,問題就出在這里,用戶如果關閉程式,這里還沒有執行完怎么辦?這里是往資料庫里寫
資料的操作,很消耗時間。如果用戶退出,我必須保證資料都寫入資料庫里才行。想知道如何做到用戶點退出按鈕的時候
必須等到任務完成后,程式才真正退出
end;
end;
uj5u.com熱心網友回復:
1,利用TEVENT變數,子執行緒開始運行時無信號,結束時(子執行緒的EXCUTE最后)有信號,主程式退出時等待這個信號,AEvent.WaitFor(AWaitTime)
2,執行緒變數是運行時無信號,結束了有信號,可以利用這個,用WaitForSingleObject()或WaitForMultipleObjects()
參考:http://blog.csdn.net/jankercsdn/article/details/51323690
uj5u.com熱心網友回復:
如果你是使用XE及以后版本,可以使用TCountdownEventprogram Project1;
{$APPTYPE CONSOLE}
uses
SysUtils,
Classes,
SyncObjs;
type
MyThread = class(TThread)
protected
procedure Execute(); override;
end;
var
Wait: TCountdownEvent;
{ MyThread }
procedure MyThread.Execute;
begin
Sleep(Random(3000));
Wait.Signal();
end;
var
i: Integer;
const
THREAD_COUNT = 100;
begin
Wait := TCountdownEvent.Create(THREAD_COUNT);
for i := 1 to THREAD_COUNT do
begin
MyThread.Create(False);
end;
Wait.WaitFor();
end.
轉載請註明出處,本文鏈接:https://www.uj5u.com/houduan/63147.html
標籤:VCL組件開發及應用
上一篇:delphi7 SuperObject使用的時候,SO的引數字串格式不對,就會記憶體報錯。怎么避免或怎么先驗證字串的格式
