通常、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
を指している場合( を指定しない場合は内部的に使用されます)、プロパティをオブジェクト ポインターに型キャストしてから、オブジェクト ポインターであるプロパティにアクセスできます。 子孫です。TIdSchedulerOfThread
TIdTCPServer
TIdSchedulerOfThreadDefault
Scheduler
TIdContext.Yarn
TIdYarnOfThread
TIdYarnOfthread.Thread
TIdThreadWithTask
TIdThreadWithTask
TThread