Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > Visual C++/MFC/WTL > Проблема с CAsyncSocket.OnReceive


Автор: VolanDeMort 7.11.2006, 03:49
Всем добррое время суток. 

Пишу простенького клиента, опираясь на класс CAsyncSocket

Проблема в том, что все функции тапа OnReceive, OnConnect и т.д, переопределенные в производном классе, не вызываются. Скажем данные поступают, их можно прочитать методом Receive, но функция OnReceive не срабатывает.  smile 

Может проблема в том, что консольное приложение? Хотя потдержка MFC включена.

Автор: _hunter 7.11.2006, 12:09
virtual часом не забыл?..

Автор: VolanDeMort 7.11.2006, 14:37
Разве при замещении "virtual" обязателен? 

Цитата

"... в использовании ключевого слова virtual для маркировки виртуального метода , замещаемого в производном классе , нет необходимости, так как даже при его отсутствии соответствующий метод производного класса считается вируальным..."

Н.Н. Мартынов, "Программировние для Windows на С++", т2. стр 158.

Автор: Earnest 7.11.2006, 17:32
Дело, конечно, не в virtual, а, скорее всего, в отсутствии фреймворка: по-моему, именно оболочка вызывает эти методы. Что-то в этом роде обсуждалось не так давно, поищи.

Автор: VolanDeMort 8.11.2006, 16:36
Поясните пож. понятие фреймворка, или пните куда нибуть, где это хорошо написанно. А то встречаю часто, а что такое не знаю. smile 

Автор: Earnest 9.11.2006, 07:56
Framework - это каркас приложения. Т.е. код,  описывающий архитектуру программы - взаимодействие разных объектов. Тебе остается только обрабатывать определенные события - код по их ловле и направлению куда-следует уже есть.
Это так, вчерне. Когда ты пишешь консольное приложение, ты начинаешь с main и пустого листа. Если чистый WinApi - то тоже с чистого листа, только немного другого. 
А если, скажем, создаешь SDI-приложение на MFC, но каркас генерирует визард. Это уже готовое приложение (правда, ничего полезного не делающее). Но - работающее: окно открывается, документы загружаются и т.д.

В описании таких функций как OnRecеive обычно пишется "... вызываются фрейворком в ответ на событие XXX". Сами-то функции не могут вызываться: либо ТЫ пишешь код вызова, либо передаешь функции в качестве callback'а, либо их вызывает оболочка.

Автор: VolanDeMort 13.11.2006, 07:47
Спасибо, пояснил.

Помог цикл прокрутки сообщений:
Код

while (SMPPState == CONNECTED)
{
  ::PeekMessage (&msg, NULL, 0, 0, PM_REMOVE);
  if(msg.message == WM_QUIT) break;
  TranslateMessage (&msg);
  DispatchMessage (&msg);
  if (sendmes.smtimer.TimerElapse()) break;
}


    

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