[英]Synchronization from class Delphi
我對Delphi中的多線程有疑問。 假設我有一個線程,並且有一個類,它可以完成一些工作並且必須具有同步性。 我該怎么做? 我進行以下過程(在ThreadClass中):
procedure TThreadClass.SynchProc(P: TProc);
begin
...
Synchronize(TThreadProcedure(P));
...
end;
我從我的類中調用它,該類在Thread中運行,但是...在過程符號“ Synchonization”中是TThread的一種方法,即對象“(作為TThread的自我)”,但是當我從類中調用proc時,變量“ Self”不包含我的ThreadClass對象(我不知道,它包含的可能是第二類的對象,在Thread中運行)。 分別認為該程序不起作用。 我搜索其他變體(我將我的threadClass對象傳遞給了第二類對象,並嘗試從第二類的過程調用“同步”過程,但是compiller不想對其進行編譯)。
你能幫助我嗎? 將不勝感激
來自烏克蘭的問候PS對不起,我的英語不好
我不確定自己是否100%理解,但我認為您遇到這種情況。 您有一個TThread
后代,例如TMyThread
。 然后該類使用另一個名為TThreadClass
類,該類不從TThread
TThreadClass
。 您想從TThreadClass
的方法調用Synchronize
。
以下是一些選項:
TThread
實例傳遞給TThreadClass
。 這是一個相當殘酷的解決方案。 現在, TThreadClass
要調用Synchronize
TThreadClass
就可以對線程做任何事情。 Synchronize
方法的過程變量傳遞給TThreadClass
。 這使TThreadClass
能夠執行所需的操作,而不再需要執行其他操作。 TThread.Synchronize
類方法,將第一個參數傳遞為nil
。 其中,最后的選擇是最簡單的。 您可以這樣做:
procedure TThreadClass.SynchProc(P: TThreadProcedure);
begin
TThread.Synchronize(nil, P);
end;
請注意,按照問題中的代碼傳入TProc
並TThreadProcedure
為TProc
並不是一個好主意。 強制調用者傳遞正確類型的過程變量。 在這種情況下,演員表是良性的,但您應該始終避免演員表。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.