通常、Delphi/Lazarus スレッドを使用する場合、スレッドの優先度を変更して実行速度を上げることができます。
とはいえ、Indy10 TCP サーバー コンポーネントに対して同じことを行うことは可能ですか? もしそうなら、どのように?そうすることは賢明ですか?
ありがとう
通常、Delphi/Lazarus スレッドを使用する場合、スレッドの優先度を変更して実行速度を上げることができます。
とはいえ、Indy10 TCP サーバー コンポーネントに対して同じことを行うことは可能ですか? もしそうなら、どのように?そうすることは賢明ですか?
ありがとう
TIdTCPServer通常の Delphi/Lazarus スレッドを使用します。
Windows で実行している場合は、Win32 APIGetCurrentThread()とSetThreadPriority()関数を呼び出すことができます。または、Indy (Indy 9 以前) または(Indy 10) 関数TThreadを使用して、オブジェクトの優先度を設定できます。SetThreadPriority()IndySetThreadPriority()
最新の Delphi バージョンを使用している場合は、このTThread.CurrentThreadプロパティを使用してTExternalThread、呼び出しスレッドを表すオブジェクトを取得できます。 TExternalThreadはTThread子孫であるため、 に渡すことも、プロパティを直接IndySetThreadPriority()設定することもできます。TThread.Priority
Indy 自身のオブジェクトに直接アクセスしたい場合TThreadは、使用している Indy のバージョンに応じて実行できます。
Indy 9 以前を使用している場合、サーバー イベントはTIdPeerThreadオブジェクト ポインターを提供します。子孫ですTIdPeerThread。TThread十分に単純です。
一方、Indy 10 を使用している場合は、スレッドを隠したり抽象化したりするのは面倒です。サーバー イベントは、スレッド自体TIdContextではなく、オブジェクト ポインターを提供するようになりました。TIdContextしかし、すべてが失われるわけではありません。プロパティが派生コンポーネントTIdTCPServer.Schedulerを指している場合( を指定しない場合は内部的に使用されます)、プロパティをオブジェクト ポインターに型キャストしてから、オブジェクト ポインターであるプロパティにアクセスできます。 子孫です。TIdSchedulerOfThreadTIdTCPServerTIdSchedulerOfThreadDefaultSchedulerTIdContext.YarnTIdYarnOfThreadTIdYarnOfthread.ThreadTIdThreadWithTaskTIdThreadWithTaskTThread