с QWaitCondition? Задача простая - есть объект наследуемый от QThread. Внутри run() запись в ком-порт и чтение.
while(true) {
...
emit ready();
m_mtx.lock();
m_condition.wait(&m_mtx);
m_mtx.unlock();
QThread::msleep(m_delay);
}
Данные передаются вызовом метода Write() из основного потока в функции кол-бэке, которая запускается по сигналу ready(). Содержимое метода write:
QMutexLocker locker(&m_mtx);
if(!isRunning()) {
start();
} else {
m_condition.wakeOne();
}
Иногда зависает вся эта конструкция. Опытным путём оказалось, что wakeOne() вызывается, а вот поток не просыпается. Объект существует в единственном экземпляре. Что можно попробовать? Вроде простейшая конструкция, взята из примера Qt, и такие баги, я аж опешил))
QThread::msleep(m_delay); а это зачем?
это для реализации задержки, чтоб цикл слишком быстро не крутился, иначе данные слишком часто в железку летят
Наверняка переопределив метод run() вы забыли запустить exec() https://doc.qt.io/qt-5/qthread.html#run
Вы уверены? Насколько я знаю это для сигналов-слотов, но у меня их нет в этом потоке. Проблема именно с WaitCondition которое подвисает через некоторое время работы. А при попытке вызвать exec() рабочий поток просто зависает
Обсуждают сегодня