PavelK
@PavelK

Как остановить таймер из другого потока?

Приветствую!
Продолжаю дальше разгребаться с потоками...
В общем, есть класс MyClass
MyClass::MyClass(QObject * parent =0) {
   _thread = new QThread(0); //-- поток не должен иметь родителя, что бы он не снёс его ненароком, пока выполняется
    connect(_thread, &QThread::started, this, &MyClass::process); //-- при запуске потока сразу начинаем работу
   moveToThread(_thread);
}

void MyClass::process() 
{
   myTimer = new QTimer(this);
   ....
}

void MyClass::stopTimer() {
   myTimer->stop();
}


Т.е. таймер по идее я создаю уже внутри другого потока, внутри класса с таймером всё ок - остановка/запуск и т.д.
НО если попробовать вызвать stopTimer(); из основного потока, то возникает ошибка
QObject::killTimer: Timers cannot be stopped from another thread

Эм... Если делать это через сигнал/слот, то всё работает как надо, но смысла не вижу делать дополнительные соединения... Как можно из основного потока без сигнал/слотов остановить таймер?
  • Вопрос задан
  • 736 просмотров
Решения вопроса 1
IGHOR
@IGHOR Куратор тега Qt
Qt/C++ DEV/CTO
Общение между тредами должно быть только через сигнал слот. Следственно остановить таймер без сигнала нельзя.
Удалять таймер так же следует в том треде в котором он создан.
Ответ написан
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы