Форум: "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