我创建了一个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; 发布于 2011-07-22 04:52:15
假设您正在使用非阻塞套接字,那么您的线程需要一个正在运行的消息队列和处理循环。这就是调用MessageBox()的原因--它是一个模式对话框,在内部抽出调用线程的消息队列。在连接的生命周期内,您的线程需要在循环中调用PeekMessage()或GetMessage()。您的循环可以使用MsgWaitForMultipleObjects()来检测消息队列何时有需要处理的内容,以及线程是否有其他需要处理的内容。
发布于 2011-07-22 19:57:10
尝试用Application.ProcessMessages替换Messagebox(),看看会发生什么。
https://stackoverflow.com/questions/6772614
复制相似问题