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

尝试用 Application.ProcessMessages 替换 Messagebox() 看看会发生什么。

于 2011-07-22T11:57:10.273 回答