|
|
|
Ошибка в вызове WaitCommEvent()
|
|||
|---|---|---|---|
|
#18+
Добрый день всем Происходит ошибка при вызове WaitCommEvent() Есть код записи данных в Com-порт для устройства. Запись в порт происходит по событию. Событие ожидается с помощью WaitForMultipleObject(). Приведу фрагмент кода. for(int i=0;i<22;i++) { m_events =CreateEvent(NULL,FALSE,FALSE,NULL); }; soverlapped.Offset=0; soverlapped.OffsetHigh=0; soverlapped.hEvent=m_events[2]; PortId = CreateFile(PortName, GENERIC_READ|GENERIC_WRITE,0,NULL, OPEN_EXISTING,FILE_FLAG_OVERLAPPED,NULL); SetCommMask(PortId,EV_RXCHAR); while(1) { WaitCommEvent(PortId,&evtMask,&soverlapped); DWORD dwerror=GetLastError(); if(dwerror!=ERROR_IO_PENDING) ShowError(dwerror); r=WaitForMultipleObjects(22,m_events,FALSE,INFINITE); if(r==WAIT_FAILED) ShowError(GetLastError()); else switch(r-WAIT_OBJECT_0) {... case 11: if(!WriteFile(PortId,bufer,count,&nWrite,&soverlapped)) { dwerror=GetLastError(); Sleep(1000); if(dwerror==ERROR_IO_PENDING) { if(!GetOverlappedResult(PortId, &soverlapped, &nWrite, TRUE)) ShowError(GetLastError()); } else ShowError(dwerror); }; }; }; При вызове WaitCommEvent выдается ошибка 87 Параметр задан неверно. Может кто-нибудь сталкивался с подобной проблемой. Спасибо ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 19.01.2006, 12:21 |
|
||
|
Ошибка в вызове WaitCommEvent()
|
|||
|---|---|---|---|
|
#18+
Возьмите здесь хорошую MFC обвязку к COM порту ну или перепишите по мотивам. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 19.01.2006, 12:33 |
|
||
|
Ошибка в вызове WaitCommEvent()
|
|||
|---|---|---|---|
|
#18+
Необходимо добавить,что ошибка происходит при втором проходе цикла while, при первом программа работает нормально ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 19.01.2006, 12:38 |
|
||
|
Ошибка в вызове WaitCommEvent()
|
|||
|---|---|---|---|
|
#18+
Как-то писал что-то такое... Там по-моему событие должно быть с ручным сбросом. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 19.01.2006, 13:06 |
|
||
|
Ошибка в вызове WaitCommEvent()
|
|||
|---|---|---|---|
|
#18+
По крайней мере вот такой код у меня прекрасно работал в цикле Код: plaintext 1. 2. 3. 4. 5. 6. 7. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 19.01.2006, 13:17 |
|
||
|
Ошибка в вызове WaitCommEvent()
|
|||
|---|---|---|---|
|
#18+
Если возможно, объясните пожалуйста, почему важен ручной сброс события. Сейчас запускаю программу под Windows 2000, а под 98 такая ошибка не возникала. Есть какие-нибудь тонкости работы функции в разных ОС? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 19.01.2006, 13:46 |
|
||
|
Ошибка в вызове WaitCommEvent()
|
|||
|---|---|---|---|
|
#18+
NatalyaKЕсли возможно, объясните пожалуйста, почему важен ручной сброс события. Если честно, не помню... Надо в MSDN копаться, а сейчас нет времени. Гте-то у меня была ссылка на обсуждение этой проблемы. Ага вот она . ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 19.01.2006, 13:55 |
|
||
|
|

start [/forum/topic.php?fid=57&msg=33491744&tid=2032105]: |
0ms |
get settings: |
5ms |
get forum list: |
19ms |
check forum access: |
3ms |
check topic access: |
3ms |
track hit: |
174ms |
get topic data: |
11ms |
get forum data: |
3ms |
get page messages: |
51ms |
get tp. blocked users: |
2ms |
| others: | 210ms |
| total: | 481ms |

| 0 / 0 |
