TThread не выполняет свою работу, если в середине нет MessageBox! - PullRequest
0 голосов
/ 21 июля 2011

я создал класс 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; 

Ответы [ 2 ]

2 голосов
/ 22 июля 2011

Предполагая, что вы используете неблокирующие сокеты, тогда ваш поток нуждается в работающей очереди сообщений и цикле обработки. Вот почему вызов MessageBox() работает - это модальное диалоговое окно, которое перекачивает очередь сообщений вызывающего потока внутренне. Ваш поток должен вызывать PeekMessage() или GetMessage() в цикле в течение всего времени жизни соединения. Ваш цикл может использовать MsgWaitForMultipleObjects(), чтобы определить, когда очереди сообщений есть, что обработать, если у вашего потока есть другие вещи, которые он должен сделать.

0 голосов
/ 22 июля 2011

Попробуйте заменить Messagebox () на Application.ProcessMessages и посмотрите, что произойдет.

...