簡體   English   中英

來自Delphi類的同步

[英]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

以下是一些選項:

  1. TThread實例傳遞給TThreadClass 這是一個相當殘酷的解決方案。 現在, TThreadClass要調用Synchronize TThreadClass就可以對線程做任何事情。
  2. 將引用Synchronize方法的過程變量傳遞給TThreadClass 這使TThreadClass能夠執行所需的操作,而不再需要執行其他操作。
  3. 調用TThread.Synchronize類方法,將第一個參數傳遞為nil

其中,最后的選擇是最簡單的。 您可以這樣做:

procedure TThreadClass.SynchProc(P: TThreadProcedure);
begin
  TThread.Synchronize(nil, P);
end;

請注意,按照問題中的代碼傳入TProcTThreadProcedureTProc並不是一個好主意。 強制調用者傳遞正確類型的過程變量。 在這種情況下,演員表是良性的,但您應該始終避免演員表。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM