通常在使用Delphi/Lazarus線程時,可以更改線程的優先級,以便更快地執行。更改Indy10 TCP Server執行線程優先級以獲得更快的執行速度?
也就是說,是否可以爲Indy10 TCP Server組件做同樣的事情?如果是這樣,怎麼樣?這樣做甚至是明智的嗎?
感謝
通常在使用Delphi/Lazarus線程時,可以更改線程的優先級,以便更快地執行。更改Indy10 TCP Server執行線程優先級以獲得更快的執行速度?
也就是說,是否可以爲Indy10 TCP Server組件做同樣的事情?如果是這樣,怎麼樣?這樣做甚至是明智的嗎?
感謝
TIdTCPServer
使用正常的Delphi /拉扎勒斯線程。
如果您在Windows上運行,則可以調用Win32 API GetCurrentThread()
和SetThreadPriority()
函數。或者,您可以使用Indy的SetThreadPriority()
(Indy 9及更早版本)或IndySetThreadPriority()
(Indy 10)函數來設置TThread
對象的優先級。
如果您使用的是現代Delphi版本,則可以使用TThread.CurrentThread
屬性獲取代表調用線程的TExternalThread
對象。 TExternalThread
是一個TThread
後代,所以它可以傳遞給IndySetThreadPriority()
,或者您可以直接設置TThread.Priority
屬性。
如果你想直接訪問印自己的TThread
對象,是可以做到的,這取決於印版使用的是:
如果您正在使用印9及更早版本的服務器事件提供一個TIdPeerThread
對象指針。 TIdPeerThread
是TThread
後裔。夠簡單。
另一方面,如果您使用的是Indy 10,它會將它隱藏/抽象出來。服務器事件現在提供TIdContext
對象指針,並且TIdContext
不是線程本身。但一切都不會丟失。如果TIdTCPServer.Scheduler
屬性在TIdSchedulerOfThread
衍生成分指向(TIdTCPServer
使用TIdSchedulerOfThreadDefault
內部,如果你不提供Scheduler
),那麼你可以鍵入鑄造的TIdContext.Yarn
屬性設置爲TIdYarnOfThread
對象的指針,然後訪問TIdYarnOfthread.Thread
屬性,它是一個TIdThreadWithTask
對象指針。 TIdThreadWithTask
是TThread
後裔。
你有沒有 - 不能說不太清楚我自己
謝謝雷米。這很清楚。 – JDaniel
毫無疑問,毫無疑問,雷米也會很快告訴你:)線程不會因爲它們的優先級已經提高而自動執行得更快。爲什麼你需要'更快的執行' - 實際問題是什麼? –
如果通過調高音量可以使電腦的運行速度更快,您是否認爲它們已經達到最大音量? –