別のスレッド内のtidtcpclientがメインスレッドをブロックするのはなぜですか?
-
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スレッドで実行されます。
あなたはスレッドになっていないのでブロックされます!
所属していません StackOverflow