別のスレッド内のtidtcpclientがメインスレッドをブロックするのはなぜですか?

StackOverflow https://stackoverflow.com/questions/5393800

  •  28-10-2019
  •  | 
  •  

質問

別のスレッドは、tidtcpclientとttimerを作成します。 TTIMERは3Sに設定されており、TCPCLIENTが接続されていない場合、TCPCLIENT.CONNECTを呼び出します。
接続するサーバーがない場合、これにより3秒ごとに接続しようとします。

メインスレッド(UI)は何もしませんが、マウスでウィンドウをつかんで画面上でゆっくりと移動すると、約2秒間3秒ごとに詰まり、マウスカーサーの位置にジャンプしてマウスに続きます。繰り返しますが、接続の次の試みが発生するまで。

言い換えれば、TCPClientが接続しようとすると、メインスレッドがブロックされているようです。

TCPClientが別々のスレッドにあるのに、なぜこれが起こるのですか?

役に立ちましたか?

解決

TTIMERは、WM_TIMERメッセージを受信することで機能します。これらのメッセージは、VCLスレッドでVCLのメインメッセージポンプを使用して発送されます。 3秒後にTTIMER.ONTIMERイベントが実行された後、実行されます メインスレッドで, 、だから呼び出し Connect メインVCLスレッドで実行されます。

あなたはスレッドになっていないのでブロックされます!

ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top