LINUX.ORG.RU

Qt, грамотное разделение на потоки

 ,


0

1

Всем доброго времени суток.

Пишу приложение с интерфейсом на Qt, общающееся с контроллером.

Возникла такая ситуация - при поднесении карты к считывателю необходимо отправить контроллеру команду, а также вывести сообщение в интерфейс. Делаю это так:

// проверка условий
...
// отправляем сигнал интерфейсу
emit signalSendInfoMsg (MSG_USR_WRONG_TIME);
// формируем и отсылаем команду контроллеру
controller.denyOpenGate (evcode, card);
...
Сейчас это работает так: сначала контроллер получает и выполняет команду, а затем выводится сообщение в интерфейс... А нужно, чтобы сообщение выводилось еще до выполнения команды и висело, пока она выполняется!

Сразу нашел у себя косяк в том, что приведенный выше код работал в том же потоке, что и интерфейс. Вынес этот класс в отдельный поток, как написано здесь - не помогло.

Буду признателен за идеи.

★★

В чем именно проблема? Давай конкретный код. Выносишь операцию контроллера в отдельный поток, перед началом операции посылаешь сигнал, например started(), после окончания посылаешь сигнал finished(). В интерфейсе привязываешься к этим сигналам. Что именно не работает?

bjorn
()
Ответ на: комментарий от bjorn

Еще только утро пятницы, а я уже дико туплю!

Qt мне явно в консоль писал:

QObject::moveToThread: Cannot move objects with a parent
а я это из-за обилия другой информации в логе не сразу заметил... После того, как изменил
pEvHandler = new EventHandler (this);
на
pEvHandler = new EventHandler ();
и добавил явное удаление pEvHandler в деструктор, все стало работать именно так, как я хочу!

В любом случае, спасибо за проявленный интерес и попытки помочь разобраться)

solovey ★★
() автор топика
Ответ на: комментарий от panter_dsd

Не очень понял... Можете пояснить, зачем? Из книги Шлее про Qt этот момент для меня остался непонятным...

solovey ★★
() автор топика
Ответ на: комментарий от panter_dsd

А, кажись понял... Я удаляю объект уже после завершения потока, когда его больше никто не использует...

solovey ★★
() автор топика
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.