//
Подскажите пожалуйста в чем может быть проблема, может быть кто сталкивался:
после 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.
rvv привет!
Я думаю проблема в том, что ovr разрушается до завершения операции чтения (которая идет асинхроно). Вообщем нужно вызвать CancelIo до ее разрушения. А т.к. она "автоматическая" переменная, то адресс старой и новой переменной может совпасть.
Люди работающие с OVERLAPPED операциями чтения-записи, подтвердите мое подозрение.