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

Вниз

наследование OVERLAPPED   Найти похожие ветки 

 
Polevi   (2002-09-06 14:38) [0]

Люди помогите разобраться..
Работаю с портами завершения ввода-вывода.
Создаю свой класс-наследник структуры OVERLAPPED

class CDispatcher:public OVERLAPPED
{
public:
CDispatcher(SOCKET acceptSocket, SOCKET connectSocket)
{
Offset=0;
OffsetHigh=0;
Internal=0;
InternalHigh=0;
hEvent=0;
m_bufSize=8192;
m_buffer=VirtualAlloc(NULL,m_bufSize,MEM_COMMIT, PAGE_READWRITE);
m_status=FREE;
m_acceptSocket=acceptSocket;
m_connectSocket=connectSocket;
}

void Complete(DWORD dwNumBytes)
{
switch (m_status)
{
case READING: //завершилась операция чтения
ReadComplete(dwNumBytes);
break;
case WRITING: //завершилась операция записи
m_status=FREE; //готовы к чтению
case FREE:
ReadFile((HANDLE)m_acceptSocket,m_buffer,m_bufSize,NULL,this);
m_status=READING; //началась операция чтения
}
}

void ReadComplete(DWORD dwNumBytes)
{
WriteFile((HANDLE)m_connectSocket,m_buffer,dwNumBytes,NULL,this);
m_status=WRITING; //началась операция записи
}

private:
PVOID m_buffer;
DWORD m_bufSize;
int m_status;
SOCKET m_acceptSocket, m_connectSocket;
};


вот так выглядит поток, выбирающий сообщения из порта завершения

DWORD WINAPI WorkThreadProc(LPVOID lpParameter)
{
DWORD dwNumBytes, CompKey;
CDispatcher *disp;
for (;;)
if (GetQueuedCompletionStatus(FCompPort->Handle,&dwNumBytes,
&CompKey, (OVERLAPPED **)&disp,INFINITE) && (dwNumBytes>0))
{
disp->Complete(dwNumBytes);
}
else
....
....
}

Все отлично работает, но !!!
При попытке сделать ф-ию ReadComplete виртуальной - объект портится - то есть когда в порту появляется сообщение о завершении асинхронной операции - управление передается в ReadComplete но все поля объекта содержат мусор... (кроме OVERLAPPED !!!)
Давно не занимался C++ - может ошибка очевидна, но не для меня :-)


 
Polevi   (2002-09-06 14:49) [1]

PS
>управление передается в ReadComplete
то есть в Complete



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

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

Наверх





Память: 0.55 MB
Время: 0.03 c
3-68619
mer
2002-09-27 11:30
2002.10.21
работа с TupdateSQL


14-68988
Igor_thief
2002-09-29 15:17
2002.10.21
ListView


1-68724
jgu
2002-10-10 23:51
2002.10.21
длинна String


1-68732
kofman
2002-10-10 23:53
2002.10.21
Как создать bitmap из иконки?


1-68742
PETR
2002-10-11 08:33
2002.10.21
Привет Народ !





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