Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > Delphi: Сети > TClientSocket странно работает Connect


Автор: anikss 7.11.2005, 19:37
Здравствуйте! Наткнулся на такую проблему, решения которой не знаю. Нужно, чтобы TClientSocket в неблокирующем режиме соединился с сервером и сразу же отправил ему сообщение. Я пытался использовать такую процедуру:

Код

procedure TForm1.Button8Click(Sender: TObject);
begin
  CS.Open;
  repeat until CS.Active=True;
  CS.Socket.SendText('Message');
end;


где CS - и есть компонент типа TClientSocket, но соединение вообще не происходит до окончания исполнения этой процедуры, оно происходит сразу после окончаня ее исполнения. Соответственно, цикл repeat until... будет ждать коннекта вечно. Подскажите пожалуйста варианты решения этой проблемы. Только вариант с использованием события OnConnect я уже обнаружил, жаль, он не подходит, из-за него код разваливается на 2 части.
Заранее спасибо!

Автор: Демо 7.11.2005, 21:21
Цитата(anikss @ 7.11.2005, 20:37)
repeat until CS.Active=True;


Во время цикла твое приложение обрабатывает поступающие WIn-сообщения?

Автор: Демо 7.11.2005, 21:37
Цитата(anikss @ 7.11.2005, 20:37)
жаль, он не подходит, из-за него код разваливается на 2 части.


На этом построены практически все варианты работы с сокетами. Непонятно, чем это не устраивает.

А в приведенном выше коде достаточно в цикл добавить Application.ProcessMessages;
Но это будет называться просто извращение, так как программа, вместо того, чтобы среагировать а OnConnect вхолостую крутит дурацкий цикл.:
Код

while not cs.Active do Application.ProcessMessages;

Автор: anikss 8.11.2005, 02:18
Спасибо, завелось как надо! И почему сам не догадался? smile

А насчет зачем - ну просто не люблю я события и вешать на них какие-то серьезные функции. На мой взгляд, код теряет свою наглядность. Лучше поток создать отдельный, и блокировать его не циклом, а WaitFor... - все равно это будет для меня нагляднее, чем гора обработчиков событий, и логика, размазанная по ним.

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)