首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >除非中间有一个MessageBox,否则TThread不会做它的工作!

除非中间有一个MessageBox,否则TThread不会做它的工作!
EN

Stack Overflow用户
提问于 2011-07-21 15:23:08
回答 2查看 308关注 0票数 0

我创建了一个TThread类来做一些套接字操作,问题是,除非我向它添加MessageBox,否则代码不会工作,除非我在它之前放一个MessageBox调用,否则套接字不会工作。

代码语言:javascript
复制
 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; 
EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2011-07-22 04:52:15

假设您正在使用非阻塞套接字,那么您的线程需要一个正在运行的消息队列和处理循环。这就是调用MessageBox()的原因--它是一个模式对话框,在内部抽出调用线程的消息队列。在连接的生命周期内,您的线程需要在循环中调用PeekMessage()GetMessage()。您的循环可以使用MsgWaitForMultipleObjects()来检测消息队列何时有需要处理的内容,以及线程是否有其他需要处理的内容。

票数 2
EN

Stack Overflow用户

发布于 2011-07-22 19:57:10

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

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/6772614

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档