2012-09-13 43 views
0

通常在使用Delphi/Lazarus線程時,可以更改線程的優先級,以便更快地執行。更改Indy10 TCP Server執行線程優先級以獲得更快的執行速度?

也就是說,是否可以爲Indy10 TCP Server組件做同樣的事情?如果是這樣,怎麼樣?這樣做甚至是明智的嗎?

感謝

+6

毫無疑問,毫無疑問,雷米也會很快告訴你:)線程不會因爲它們的優先級已經提高而自動執行得更快。爲什麼你需要'更快的執行' - 實際問題是什麼? –

+0

如果通過調高音量可以使電腦的運行速度更快,您是否認爲它們已經達到最大音量? –

回答

2

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對象指針。 TIdPeerThreadTThread後裔。夠簡單。

另一方面,如果您使用的是Indy 10,它會將它隱藏/抽象出來。服務器事件現在提供TIdContext對象指針,並且TIdContext不是線程本身。但一切都不會丟失。如果TIdTCPServer.Scheduler屬性在TIdSchedulerOfThread衍生成分指向(TIdTCPServer使用TIdSchedulerOfThreadDefault內部,如果你不提供Scheduler),那麼你可以鍵入鑄造的TIdContext.Yarn屬性設置爲TIdYarnOfThread對象的指針,然後訪問TIdYarnOfthread.Thread屬性,它是一個TIdThreadWithTask對象指針。 TIdThreadWithTaskTThread後裔。

+0

你有沒有 - 不能說不太清楚我自己

+0

謝謝雷米。這很清楚。 – JDaniel