0

通常、Delphi/Lazarus スレッドを使用する場合、スレッドの優先度を変更して実行速度を上げることができます。

とはいえ、Indy10 TCP サーバー コンポーネントに対して同じことを行うことは可能ですか? もしそうなら、どのように?そうすることは賢明ですか?

ありがとう

4

1 に答える 1

2

TIdTCPServer通常の Delphi/Lazarus スレッドを使用します。

Windows で実行している場合は、Win32 APIGetCurrentThread()SetThreadPriority()関数を呼び出すことができます。または、Indy (Indy 9 以前) または(Indy 10) 関数TThreadを使用して、オブジェクトの優先度を設定できます。SetThreadPriority()IndySetThreadPriority()

最新の Delphi バージョンを使用している場合は、このTThread.CurrentThreadプロパティを使用してTExternalThread、呼び出しスレッドを表すオブジェクトを取得できます。 TExternalThreadTThread子孫であるため、 に渡すことも、プロパティを直接IndySetThreadPriority()設定することもできます。TThread.Priority

Indy 自身のオブジェクトに直接アクセスしたい場合TThreadは、使用している Indy のバージョンに応じて実行できます。

Indy 9 以前を使用している場合、サーバー イベントはTIdPeerThreadオブジェクト ポインターを提供します。子孫ですTIdPeerThreadTThread十分に単純です。

一方、Indy 10 を使用している場合は、スレッドを隠したり抽象化したりするのは面倒です。サーバー イベントは、スレッド自体TIdContextではなく、オブジェクト ポインターを提供するようになりました。TIdContextしかし、すべてが失われるわけではありません。プロパティが派生コンポーネントTIdTCPServer.Schedulerを指している場合( を指定しない場合は内部的に使用されます)、プロパティをオブジェクト ポインターに型キャストしてから、オブジェクト ポインターであるプロパティにアクセスできます。 子孫です。TIdSchedulerOfThreadTIdTCPServerTIdSchedulerOfThreadDefaultSchedulerTIdContext.YarnTIdYarnOfThreadTIdYarnOfthread.ThreadTIdThreadWithTaskTIdThreadWithTaskTThread

于 2012-09-13T21:14:39.637 に答える