0

私はいくつかのソケット操作を行うために TThread のクラスを作成しました。問題は、コードに MessageBox を追加しない限りコードが機能しないことです。その前に MessageBox 呼び出しを配置し​​ない限り、ソケットは機能しません。

 Sleep(2000); //Waiting for the Socket to Come to the Array
 // Messagebox(0, '', '', 0); { Wont work unless this line is Uncommented }
 if Server.ClientList[Handle] <> nil then
 begin
  if (Server.ClientList[Handle].Connected) and (AppSocket.Connected) do
  begin
   // Send Data on Socket
   // Relay Data between Server.ClientList[Handle] and AppSocket;
  end; 
4

2 に答える 2

2

ノンブロッキング ソケットを使用していると仮定すると、スレッドには実行中のメッセージ キューと処理ループが必要です。これが、呼び出しが機能する理由です。これMessageBox()は、呼び出しスレッドのメッセージ キューを内部的にポンピングするモーダル ダイアログです。スレッドは、接続の存続期間中、PeekMessage()またはGetMessage()ループ内で呼び出す必要があります。ループを使用MsgWaitForMultipleObjects()して、スレッドに他に処理する必要がある場合に、メッセージ キューに処理するものがあることを検出できます。

于 2011-07-21T20:52:15.447 に答える
0

Messagebox() を Application.ProcessMessages に置き換えてみて、何が起こるかを確認してください。

于 2011-07-22T11:57:10.273 に答える