Delphi Event Bus 這個開源項目發布了,這是我用到的最好的開源項目,強烈推薦給大家。
前期也有寫過這方面的文章,如果你還不知道,可以學習一下,這里不多說了,這個版本改動不大,但意義重大,使用了自己內部的線程池來管理自己的線程,支持Delphi 11.1,強烈建議升級。
我查看了代碼,就是就是在TEventBus類中聲明了一個FDebThreadPool:
TEventBus = class(TInterfacedObject, IEventBus) strict private FDebThreadPool: TThreadPool;
然后呢,在調用訂閱任務時:
{$IF CompilerVersion >= 28.0} TTask.Run(LProc, FDebThreadPool);
這里,使用自己的線程池對象來執行線程任務了,注意,這里使用了系統的編譯變量CompileVersion>=28,也就是最新的Delphi 11,才使用自己的線程池。關於編譯變量CompileVersion對應的Delphi版本,可以參考這篇文章:Delphi編譯器版本對照表及工具鏈
作者為什么要只在Delphi 11才使用自己的線程池呢?按我的理解,就是說明Delphi 11的TThreadPool對象才成熟吧,即然這樣寫,那對於使用Delphi 11以前版本的用戶,沒有必要升級了。
下面是我寫的如何使用Event Bus的文章,可以復習下:
Delphi Event Bus入門
Delphi Event Bus進階(一)控制訂閱方法的線程模式
Delphi Event Bus進階(二)GlobalEventBus是怎么來的?
Delphi Event Bus進階(三)如何使用通道?
這是開源地址:
https://www.github.com/spinettaro/delphi-event-bus
