Другое приложение разрывает QTimer в потоке на Windows с C ++ - PullRequest
0 голосов
/ 03 июня 2019

У меня есть свой собственный небольшой каркас (serial_port ниже) для отправки / получения сообщений через QSerialPort. Вот как я начинаю это с другой темы:

serial_port->moveToThread(connection_thread);
serial_port->serial->moveToThread(connection_thread);
serial_port->timer->moveToThread(connection_thread);

Тогда я подключаю сигналы:

connect(connection_thread, SIGNAL(started()), serial_port, SLOT(start_loop()));
connect(serial_port, SIGNAL(finished()), connection_thread, SLOT(quit()));
connect(connection_thread, SIGNAL(finished()), serial_port, SLOT(deleteLater()));
connect(serial_port, SIGNAL(finished()), connection_thread, SLOT(deleteLater()));

В serial_port QTimer отправляет сообщение с таймаутом:

connect(timer, SIGNAL(timeout()), this, SLOT(send_message()));   

Моя проблема в том, что другая программа, работающая после QTimer, начинает работать, нарушает этот таймер. Это происходит где-то около 20% случаев. Проблема состоит в том, что сигнал timeout() получается намного быстрее, чем предполагалось. Это происходит на платформе Windows, но для Linux все в порядке. Где я могу найти причину проблемы?

1 Ответ

0 голосов
/ 03 июня 2019

Попробуйте использовать это:

  • connection_thread->setPriority(QThread::HighestPriority);

или

  • connection_thread->setPriority(QThread::TimeCriticalPriority);

, чтобы сделать расписание чаще.

и

  • serial_port->timer->setTimerType(Qt::PreciseTimer)

чтобы сделать ваш QTimer a PriciseTimer тип.

Надеюсь, это поможет вам.

...