Главная страница
    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.44 MB
Время: 0.008 c
8-68876
Gayrus
2002-06-23 08:40
2002.10.21
OpenGL


1-68704
Jackson
2002-10-11 00:45
2002.10.21
Внимание: вопрос!!!


14-68968
Naik
2002-09-28 16:32
2002.10.21
Пишите, кому не в лом:)


14-68929
KIR
2002-10-01 13:56
2002.10.21
D7. Она есть или ее нет? (в офф. релизе)


1-68832
me2
2002-10-10 12:05
2002.10.21
XML-документ





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