Добрый день! Подскажите, не было ли ни у кого проблем

с 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, и такие баги, я аж опешил))

4 ответов

11 просмотров

QThread::msleep(m_delay); а это зачем?

Ilia-Zhitenev Автор вопроса
Michael Chambers
QThread::msleep(m_delay); а это зачем?

это для реализации задержки, чтоб цикл слишком быстро не крутился, иначе данные слишком часто в железку летят

Наверняка переопределив метод run() вы забыли запустить exec() https://doc.qt.io/qt-5/qthread.html#run

Ilia-Zhitenev Автор вопроса
BAHR
Наверняка переопределив метод run() вы забыли запу...

Вы уверены? Насколько я знаю это для сигналов-слотов, но у меня их нет в этом потоке. Проблема именно с WaitCondition которое подвисает через некоторое время работы. А при попытке вызвать exec() рабочий поток просто зависает

Похожие вопросы

Обсуждают сегодня

Это может быть все-таки не флудвейт? у меня ботфазер принимает изменения и отображает даже что они изменились, на видео видно что он прислал якобы уже измененное описание, н...
OVERLINK
13
Добрый день. Мне посоветовали обратиться к вам в чат за помощью. Ситуация описана на скрине. Как мне сказали, мне на бота навесили флудвейт. Есть ли возможность снять его ра...
OVERLINK
7
Просто по очереди выпиливаешь на ручной маппинг? По методу за раз
Andrii Kurdiumov
7
И? Все равно глазами проверять надо каждое поле
Andrii Kurdiumov
4
Ну есть у нас десяток компаний которым надо. Остальным то зачем?
Andrii Kurdiumov
4
Всем привет! Взялся портировать модули на 18 версию, лезет _logger.log(log_level, 'no translation language detected, skipping translation %s', frame, stack_info=True) А чт...
Max Lit
3
Приветствую. А не подскажете какие ограничения есть на использования api метода setMyName ? Несколько раз сменил имя бота и получил бан на 2 месяца на смену имени.
Slick Slack
8
Доброе утро, а кто то делал Google аналитику через php ? curl_setopt($ch, CURLOPT_NOSIGNAL, true); Это должно быть async без ожидания ответа. Вообще php нормально с таким с...
Max Dubovsky
9
Привет, коллеги! Возникла задача ограничить максимальный размер вложений для определённых расширений, например, чтобы для изображений лимит был 10 МБ, а для видео — 100 МБ. Ог...
Andro
1
Всем привет, добавляю поля в админку через контроллер взависимости от id, поля отображаются, сохраняются в бд, но не редактируются в админке, кто-то сталкивался с таким?
Catherine Poll
4
Карта сайта