我發佈了一個question混淆了我關於多線程,我還沒有找到答案在線。假設我已經創建了類似TTest = class(TThread)
的東西,所以你可以想象我有一個執行。它裏面我可以打電話:德爾菲隊列和同步參數
Synchronize(procedure
begin
//code
end);
Queue(procedure
begin
//code
end);
從我所瞭解上面的代碼匿名方法,在Self
之前應該有另一個隱藏的參數。假設現在我不在派生類(如TTest)中,並且處於按鈕單擊事件中。我可以稱之爲:
TTask.Run(
procedure
begin
TThread.Queue(nil,
procedure
begin
testB.Text := 'Please wait...';
end;
TThread.Queue(nil,
procedure
begin
testB.Text := 'Please wait MORE...';
end;
end);
在這裏,我已經使用零作爲參數,因爲(如果我是正確的),如果我叫TThread.CurrentThread
,當隊列完成其他將因RemoveQueuedEvents被刪除()。
所以我的真正的問題是:如何確定時,我必須通過nil
或TThread.CurrentThread
?
我已經明白,在派生類的TThread的像TTEST以上我可以叫Queye /同步只用匿名方法,因爲
Self
來搶救。如果我必須在TTask.Run中調用Queue或Synchronize,例如,我確定必須使用nil參數嗎?
我是新來的這種事情,所以我覺得這很難,我想了解這個概念,否則我會創建破碎的應用程序。我看到Nick Hodges在他的書中使用了零和CurrentThread,但我不明白爲什麼。
因此,如果我總是使用不會危險的零參數?但是我仍然需要知道何時可以使用TThread.CurrentThread。 –
我可以看到在任何情況下都不需要使用CurrentThread。實際上你無法訪問匿名方法中的那個參數。 –
我只是希望我的程序是線程安全的,所以您確認我始終可以使用nil作爲參數。我要去接受 –