powered by simpleCommunicator - 2.0.61     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / C++ [игнор отключен] [закрыт для гостей] / Ошибка в вызове WaitCommEvent()
7 сообщений из 7, страница 1 из 1
Ошибка в вызове WaitCommEvent()
    #33491390
NatalyaK
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Добрый день всем
Происходит ошибка при вызове 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 Параметр задан неверно. Может кто-нибудь сталкивался с подобной проблемой.
Спасибо
...
Рейтинг: 0 / 0
Ошибка в вызове WaitCommEvent()
    #33491450
nikname
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Возьмите здесь хорошую MFC обвязку к COM порту ну или перепишите по мотивам.
...
Рейтинг: 0 / 0
Ошибка в вызове WaitCommEvent()
    #33491478
NatalyaK
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Необходимо добавить,что ошибка происходит при втором проходе цикла while, при первом программа работает нормально
...
Рейтинг: 0 / 0
Ошибка в вызове WaitCommEvent()
    #33491587
_Балтика
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Как-то писал что-то такое... Там по-моему событие должно быть с ручным сбросом.
...
Рейтинг: 0 / 0
Ошибка в вызове WaitCommEvent()
    #33491635
_Балтика
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
По крайней мере вот такой код у меня прекрасно работал в цикле
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
OVERLAPPED ov = { 0 };
ov.hEvent = CreateEvent(NULL, TRUE, FALSE, NULL);
::WriteFile(hPort, writeBuf, numWriteByte, &numWriteByte, &ov);
if (::WaitForSingleObject(ov.hEvent, INFINITE) == WAIT_OBJECT_0)
    ::GetOverlappedResult(hPort, &ov, &numWriteByte, FALSE);
::ResetEvent(owner->m_hWriteEvent);
::CloseHandle(ov.hEvent);
...
Рейтинг: 0 / 0
Ошибка в вызове WaitCommEvent()
    #33491744
NatalyaK
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Если возможно, объясните пожалуйста, почему важен ручной сброс события.

Сейчас запускаю программу под Windows 2000, а под 98 такая ошибка не возникала. Есть какие-нибудь тонкости работы функции в разных ОС?
...
Рейтинг: 0 / 0
Ошибка в вызове WaitCommEvent()
    #33491788
_Балтика
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
NatalyaKЕсли возможно, объясните пожалуйста, почему важен ручной сброс события.
Если честно, не помню... Надо в MSDN копаться, а сейчас нет времени. Гте-то у меня была ссылка на обсуждение этой проблемы. Ага
вот она .
...
Рейтинг: 0 / 0
7 сообщений из 7, страница 1 из 1
Форумы / C++ [игнор отключен] [закрыт для гостей] / Ошибка в вызове WaitCommEvent()
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]