проблема c PurgeComm
От: rvv Россия  
Дата: 16.07.04 10:02
Оценка:
//

Подскажите пожалуйста в чем может быть проблема, может быть кто сталкивался:

после OVERLAPPED операции чтения из COM-порта завершившейся по таймауту,
при вызове PurgeComm(m_hComm,PURGE_TXABORT| PURGE_RXABORT | PURGE_TXCLEAR| PURGE_RXCLEAR)
происходит порча локльных переменных (в частности оказывается испорчена стуктура ovr)
PurgeComm — ошибок не возвращает.

код примерно выглядит так

        OVERLAPPED    ovr = {0};
        .....
        ReadFile(m_hComm, buf, readSize, &bc, &ovr);
        .....
        WaitForSingleObject(ovr.hEvent, ReadIntervalTimeout); // выход по превышению времени ожидания


        // далее код из другого метода
        OVERLAPPED    ovr = {0}; // портится эта пременная
    .....
    PurgeComm(m_hComm,PURGE_TXABORT| PURGE_RXABORT | PURGE_TXCLEAR| PURGE_RXCLEAR);// Здесь происходит повреждение ovr


Ошибка наблюдается только в Release версии.
VC.NET, Windows2000, WindowsXP.
Re: проблема c PurgeComm
От: Salex100 Россия  
Дата: 16.07.04 22:03
Оценка:
rvv привет!

Я думаю проблема в том, что ovr разрушается до завершения операции чтения (которая идет асинхроно). Вообщем нужно вызвать CancelIo до ее разрушения. А т.к. она "автоматическая" переменная, то адресс старой и новой переменной может совпасть.

Люди работающие с OVERLAPPED операциями чтения-записи, подтвердите мое подозрение.
Жизнь удалась!
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.