Доброго времени суток!
Есть плата от которой приходит прерывание через событие Win32 API. В VS код на С++:
HANDLE hBcEvent;
hBcEvent = CreateEvent(NULL, TRUE, FALSE, NULL);
tmkdefevent(hBcEvent, TRUE);
bcputw(0, CW(RT_ADDR, RT_RECEIVE, wSubAddr, wLen)); //Запись командного слова в базу
bcputblk(1, awBuf, wLen); //Запись передаваемых данных
bcstartx(wBase, DATA_BC_RT); //Передача данных
/* Wait for an interrupt */
switch (WaitForSingleObject(hBcEvent, 1000))
{
case WAIT_OBJECT_0:
ResetEvent(hBcEvent);
break;
case WAIT_TIMEOUT:
printf("Interrupt timeout error\n"); // qDebug() << "Interrupt timeout error" << endl;
break;
default:
printf("Interrupt wait error\n"); // qDebug() << "Interrupt wait error" << endl;
break;
}
нормально работает.
Но на Qt такой код срабатывает только 1 раз. Дольше выдает "Interrupt timeout error". Подскажите пожалуйста в чем может быть проблема?
Вырезка из документации на плату:
В драйверах Windows работа с прерываниями осуществляется через механизм событий Win32. Прежде всего, процесс должен сообщить драйверу идентификатор (handle) используемого события для текущего выбранного ТМК через вызов функции tmkdefevent, которой передается в качестве первого параметра идентификатор события Win32, полученный из Win32 вызова CreateEvent:
void tmkdefevent(HANDLE hEvent, BOOL fEventSet);
Нулевое значение hEvent отменяет использование события. Значение параметра fEventSet равное TRUE указывает на необходимость установки события драйвером через вызовы SetEvent, а значение FALSE - через вызовы PulseEvent. Внимание! В текущей версии драйвера значение переменной fEventSet игнорируется (принимается равным TRUE).