我有一個表單,其中有一個全域變數myThread01
type
Tmainform = class(TForm)
.....
end;
var
mainform: Tmainform;
myThread01: TThread;
在Tmainform中,一個函式呼叫了myThread01
procedure Tmainform.thread3;
begin
// 永回圈執行緒1
myThread03 := TThread.CreateAnonymousThread(
procedure
begin
while true do
begin
.........
end;
end);
myThread03.Priority := tpTimeCritical;
myThread03.Start;
end;
myThread01中是無限回圈的代碼。
這個myThread01的生存期是多少呢? 我發現有時打開子表單后,會出現myThread01失效的情況,不知道是不是和生存期有關系呢??
uj5u.com熱心網友回復:
你實作執行緒的代碼不標準(有問題)1、定義一個自己的執行緒型別
type
TMyThread = class(Tthread)
protected
procedure Execute;override;
end;
2、給執行緒寫個物體的程序
procedure TMyThread.Execute;
begin
ThreadOn:=True;
ThreadEnd:=False;
FreeOnTerminate:=true;
i:=0;
repeat
。。。。。
sleep(75);
until Terminated or ThreadEnd;
ThreadOn:=False;
end;
3、宣告一個對應的變數
var MyThread:TMyThread;
它是全域的。它指向執行緒的地址。
4、創建呼叫執行緒
myThread := TMyThread.Create();創建執行緒,它要實作體:
這樣才能實作執行緒。問題:至于執行緒拋入均勻長時間,要看MyThread.Execute;代碼執行情況,執行完執行緒就自動釋放。
uj5u.com熱心網友回復:
打字有誤:這樣才能實作執行緒。問題:至于執行緒生存執行多長時間,要看MyThread.Execute;代碼執行情況,執行完執行緒就自動釋放。
至于生存期
變數MyThread它是全域的。執行緒的存在取決于,執行緒的實作部分代碼MyThread.Execute;執行時間。
uj5u.com熱心網友回復:
procedure Tmainform.thread3;中沒有看到對myThread01的訪問呢?是不是myThread03打錯了?
uj5u.com熱心網友回復:
myThread01和myThread03是什么關系?寫錯了吧?退出執行緒后釋放需要設定FreeOnTerminate:=True;否則需要自己顯式釋放。沒有退出條件的回圈就是死回圈,不會自動退出。uj5u.com熱心網友回復:
CreateAnonymousThread是新版本執行緒的用法,沒有不妥。uj5u.com熱心網友回復:
一般使用CreateAnonymousThread創建匿名執行緒目的就是外面不用訪問!而且執行緒這個東西,一般也不做訪問,我也沒見到mythread01,執行緒的生命周期,一般執行緒函式的execute完了,執行緒的運行周期也就完了,如果FreeOnTerimte這個設定為了true,就會自動釋放,物件都不存在了,否則就是執行緒物件還在,但是執行緒已經結束
轉載請註明出處,本文鏈接:https://www.uj5u.com/houduan/58188.html
標籤:VCL組件開發及應用
