Добрый день, форумчане.
Возник вопрос. К com-порту подключено устройство, которое опрашивается через определенный промежуток времени. Необходим механизм разъединения в случае, если устройство не отвечает. При отправке сообщения запускаю таймер, а при получении ответа отключаю. Кроме того, если не было ответа необходимо продублировать запрос (количество попыток настраивается). По умолчанию количество попыток 3 и встретился с тем, что таймер два раза отрабатывает, а третий уже нет и получается, что сообщения сыпятся в порт постоянно, а ответа нет (возможно выставили некорректно скорость, либо устройство зависло).
слот обработки таймаута сделал следующим образом:
void CModbus::timeout()
{
m_timeout_timer->stop();
m_counter_request_error++; // количесто запросов без ответа
m_receive_buffer.clear();
if(m_counter_request_error == m_request_count_repeat)
{
disconnectDevice();
}
else
{
request(m_request_cur);
}
}
Т.е. если запрос остался без ответа 3 раза, то отключаемся от порта. Иначе повторяем текущий запрос...почему таймер не отрабатывает третий раз? Где может подвисать?
Спасибо.