Главная страница
    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.49 MB
Время: 0.041 c
14-1082558213
KSergey
2004-04-21 18:36
2004.05.09
Вышла знаменитая "Inside for Microsoft Windows 2000"


1-1082565969
Bestden
2004-04-21 20:46
2004.05.09
Как с помощью цикла перевести из десятка edit в массив?


4-1079688851
Desdechado
2004-03-19 12:34
2004.05.09
HBITMAP LoadBitmap(...)


1-1082210370
Kiloper
2004-04-17 17:59
2004.05.09
Как програмно собрать несколько файлов в один файл,


1-1082729140
Murad
2004-04-23 18:05
2004.05.09
Символы "<" и ">" в IXMLDocument





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
Английский Французский Немецкий Итальянский Португальский Русский Испанский