Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "Сети";
Текущий архив: 2004.04.11;
Скачать: [xml.tar.bz2];

Вниз

TClientSocket в консольном приложении   Найти похожие ветки 

 
pave   (2004-03-15 09:30) [0]

Уважаемые!
Поскажите, почему TClientSocket не работает в консольном приложении. В чём причина.


 
pave   (2004-03-15 09:30) [0]

Уважаемые!
Поскажите, почему TClientSocket не работает в консольном приложении. В чём причина.


 
BiN ©   (2004-03-15 09:35) [1]

в потоке, где создается TClientSocket, конечно же, нет цикла обработки оконных сообщений?


 
BiN ©   (2004-03-15 09:35) [1]

в потоке, где создается TClientSocket, конечно же, нет цикла обработки оконных сообщений?


 
pave   (2004-03-15 09:43) [2]

Не понял.


 
pave   (2004-03-15 09:43) [2]

Не понял.


 
BiN ©   (2004-03-15 09:48) [3]

в потоке, в кот. ты создаешь экземпляр TClientSocket, должен находится цикл обрабртки входящих оконных сообщений. Пример такого цикла есть в методе ProcessMessage класса TApplication.


 
BiN ©   (2004-03-15 09:48) [3]

в потоке, в кот. ты создаешь экземпляр TClientSocket, должен находится цикл обрабртки входящих оконных сообщений. Пример такого цикла есть в методе ProcessMessage класса TApplication.


 
pave   (2004-03-15 10:22) [4]

Можно по подробней.

function TCustomWinSocket.GetHandle: HWnd;
begin
 if FHandle = 0 then
   FHandle := AllocateHwnd(WndProc);
 Result := FHandle;
end;

Зачем TClientSocket нужен "цикл обработки оконных сообщений"


 
pave   (2004-03-15 10:22) [4]

Можно по подробней.

function TCustomWinSocket.GetHandle: HWnd;
begin
 if FHandle = 0 then
   FHandle := AllocateHwnd(WndProc);
 Result := FHandle;
end;

Зачем TClientSocket нужен "цикл обработки оконных сообщений"


 
Digitman ©   (2004-03-15 10:32) [5]

затем  чтобы в нужный момент времени вызывалась оконная процедура WndProc окна, создаваемого при вызове Gethandle


 
Digitman ©   (2004-03-15 10:32) [5]

затем  чтобы в нужный момент времени вызывалась оконная процедура WndProc окна, создаваемого при вызове Gethandle


 
pave   (2004-03-15 10:48) [6]

Создаю, что-то подобное:
CreateWindow("MyClass","MyWndow",WS_POPUP,0,0,0,0,0,hInstance,nil);

function WndProc(Window : hWnd; Msg,WParam, LParam : Integer): Integer; StdCall;
begin
 Result := 0;
 Case Msg of
   WM_NCCREATE  : Result:= 1;
   WM_DESTROY   : PostQuitMessage(0);
   else Result:= DefWindowProc(Window,Msg,WParam,LParam);
 end;
end;
А что дальше? Куда сунуть TClientSiocket?


 
pave   (2004-03-15 10:48) [6]

Создаю, что-то подобное:
CreateWindow("MyClass","MyWndow",WS_POPUP,0,0,0,0,0,hInstance,nil);

function WndProc(Window : hWnd; Msg,WParam, LParam : Integer): Integer; StdCall;
begin
 Result := 0;
 Case Msg of
   WM_NCCREATE  : Result:= 1;
   WM_DESTROY   : PostQuitMessage(0);
   else Result:= DefWindowProc(Window,Msg,WParam,LParam);
 end;
end;
А что дальше? Куда сунуть TClientSiocket?


 
BiN ©   (2004-03-15 10:55) [7]

ему про Фому, а он про Ерему...

так ка у тебя консольное приложение, то скорее всего тебе нужно разнести функции ввода/вывода и работу с сокетами в разные потоки. В одном из них и должна идти обработка типа

repeat
 if PeekMessage(Msg, 0, 0, 0, PM_REMOVE) then
 begin
   TranslateMessage(Msg);
   DispatchMessage(Msg);
 end
until ...

там же и должен быть создан твой сокет. Всё.


 
BiN ©   (2004-03-15 10:55) [7]

ему про Фому, а он про Ерему...

так ка у тебя консольное приложение, то скорее всего тебе нужно разнести функции ввода/вывода и работу с сокетами в разные потоки. В одном из них и должна идти обработка типа

repeat
 if PeekMessage(Msg, 0, 0, 0, PM_REMOVE) then
 begin
   TranslateMessage(Msg);
   DispatchMessage(Msg);
 end
until ...

там же и должен быть создан твой сокет. Всё.


 
Digitman ©   (2004-03-15 10:59) [8]


> Создаю, что-то подобное


.. но не имеющее ничего общего с циклом выборки-диспетчеризации сообщений ... который выглядит гораздо проще

var
 Msg: TMsg;

...

//здесь создаем объект TClientSocket, инициализируем его для работы в режиме ctNonBlocking,
//назначаем нужные обработчики его событий
//и активизируем  его вызовом Open()

//следом же должен идти собственно упомянутый цикл

while GetMessage(Msg, 0, 0, 0) do //ждем и выбираем из очереди оконных сообщений любые поступающие сообщения, выход из цикла - по поступлению сообщения WM_QUIT
 DispatchMessage(Msg); //диспетчеризуем сообщения, в рез-те чего вызываются нужные оконные процедуры существующих окон, созданных текущим кодовым потоком


 
Digitman ©   (2004-03-15 10:59) [8]


> Создаю, что-то подобное


.. но не имеющее ничего общего с циклом выборки-диспетчеризации сообщений ... который выглядит гораздо проще

var
 Msg: TMsg;

...

//здесь создаем объект TClientSocket, инициализируем его для работы в режиме ctNonBlocking,
//назначаем нужные обработчики его событий
//и активизируем  его вызовом Open()

//следом же должен идти собственно упомянутый цикл

while GetMessage(Msg, 0, 0, 0) do //ждем и выбираем из очереди оконных сообщений любые поступающие сообщения, выход из цикла - по поступлению сообщения WM_QUIT
 DispatchMessage(Msg); //диспетчеризуем сообщения, в рез-те чего вызываются нужные оконные процедуры существующих окон, созданных текущим кодовым потоком


 
Digitman ©   (2004-03-15 11:02) [9]


> BiN


в консольном приложении TranslateMessage() необязателен - совершенно лишний и бестолковый вызов


 
Digitman ©   (2004-03-15 11:02) [9]


> BiN


в консольном приложении TranslateMessage() необязателен - совершенно лишний и бестолковый вызов


 
BiN ©   (2004-03-15 11:09) [10]

Digitman ©   (15.03.04 11:02) [9]
автор в посте [6] вроде создает свои окна. Так что в общем случае TranslateMessage не является таким уж "совершенно лишним и бестолковым вызовом". Хотя, конечно, если не будут использоваться окна как инструменты ввода информации, вызов данной функции теряет смысл.


 
BiN ©   (2004-03-15 11:09) [10]

Digitman ©   (15.03.04 11:02) [9]
автор в посте [6] вроде создает свои окна. Так что в общем случае TranslateMessage не является таким уж "совершенно лишним и бестолковым вызовом". Хотя, конечно, если не будут использоваться окна как инструменты ввода информации, вызов данной функции теряет смысл.



Страницы: 1 вся ветка

Форум: "Сети";
Текущий архив: 2004.04.11;
Скачать: [xml.tar.bz2];

Наверх





Память: 0.5 MB
Время: 0.055 c
14-1081947771
*pavel
2004-04-14 17:02
2004.05.09
Реализация сети


11-1067063659
Vladimir Kladov
2003-10-25 10:34
2004.05.09
Исправление в замене system для D6


11-1067411606
SPeller
2003-10-29 10:13
2004.05.09
Интересно...


8-1076409176
_none_
2004-02-10 13:32
2004.05.09
GDI+ и win2003server


14-1082118947
Bel
2004-04-16 16:35
2004.05.09
Эксперимент с координацией.





Afrikaans Albanian Arabic Armenian Azerbaijani Basque Belarusian Bulgarian Catalan Chinese (Simplified) Chinese (Traditional) Croatian Czech Danish Dutch English Estonian Filipino Finnish French
Galician Georgian German Greek Haitian Creole Hebrew Hindi Hungarian Icelandic Indonesian Irish Italian Japanese Korean Latvian Lithuanian Macedonian Malay Maltese Norwegian
Persian Polish Portuguese Romanian Russian Serbian Slovak Slovenian Spanish Swahili Swedish Thai Turkish Ukrainian Urdu Vietnamese Welsh Yiddish Bengali Bosnian
Cebuano Esperanto Gujarati Hausa Hmong Igbo Javanese Kannada Khmer Lao Latin Maori Marathi Mongolian Nepali Punjabi Somali Tamil Telugu Yoruba
Zulu
Английский Французский Немецкий Итальянский Португальский Русский Испанский