Sasha_t
Зарегистрирован: 09.05.2006 Сообщения: 5 Откуда: Украина, Днепр
|
Добавлено: Ср Окт 18 2006 09:09 Заголовок сообщения: COM порт и убийство треда.. помогите разобраться с проблем |
|
|
Добрый день.
На ком порте висит модем, осуществляется передача/прием данных..
Порт в асинхронном режиме. Функция чтения из порта в отдельном треде, который ждет событие EV_RXCHAR, и считывает данные. Запись в порт просто так, без треда, однако перед вызовом непосредственно самой записи убивается тред чтения. После записи в порт, тред на чтение снова запускается... Тоесть в ходе работы программы много раз осуществляется запись в порт и чтение. OVERLAPPED никак не инициализируется. Проблема состоит в том что под 98windows, програма вылетает через некоторое время, выполнила недопустимую операцию. Причиной вылета программы служит момент убийства треда чтения данных из порта. Под XP проблем никаких нет. Как преодолеть?
Приведу в усиченном виде вызов основных функций в которых, на мой взгляд, кроется проблема, а чтение, запись, запуск треда , убийство треда, там наверно все в порядке.
Заранее спасибо.
Код: |
HANDLE RPort;
OVERLAPPED o;
DWORD dwEvtMask;
char sPort[256][15];
RPort=::CreateFile(&RealPort[Port][0],
GENERIC_READ|GENERIC_WRITE,
NULL,
0,
OPEN_EXISTING,
NULL,
NULL);
SetCommMask(RPort, EV_RXCHAR|EV_BREAK|EV_CTS|EV_DSR|EV_RLSD);
WaitCommEvent(Cl->RPort, &Cl->dwEvtMask, &Cl->o);
/*Cl - это указатель на класс где описаны переменные*/
|
|
|