Главная страница
Top.Mail.Ru    Яндекс.Метрика
Текущий архив: 2002.10.21;
Скачать: CL | DM;

Вниз

наследование 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 вся ветка

Текущий архив: 2002.10.21;
Скачать: CL | DM;

Наверх




Память: 0.47 MB
Время: 0.02 c
7-69035
Stas Ant
2002-08-14 07:00
2002.10.21
Виртуальный винт


14-68933
Дмитрий Сазонов
2002-09-27 00:23
2002.10.21
Перевод Си-программ в Паскаль


1-68835
alord
2002-10-09 11:17
2002.10.21
Печать HTML файла


1-68844
Толик
2002-10-09 14:41
2002.10.21
TComboBox и его стили


3-68613
xmag
2002-09-25 23:13
2002.10.21
Написание Б.Д. своего типа.