@khrisanfov
Программист

QThread работает медленно на macOS. В чем причина?

Пример кода:
int main(int argc, char *argv[])
{
  QApplication a(argc, argv);

  Worker *worker = new Worker();
  QThread *thread = new QThread;
  worker->moveToThread(thread);
  QObject::connect(thread, SIGNAL(started()), observer, SLOT(doWork()));
  QObject::connect(worker, SIGNAL(finished()), thread, SLOT(quit()));
  QObject::connect(worker, SIGNAL(finished()), worker,
                   SLOT(deleteLater()));
  QObject::connect(thread, SIGNAL(finished()), thread, SLOT(deleteLater()));
  thread->start(QThread::HighestPriority);

  return a.exec();
}

void Worker::doWork() {
  while (!is_stop) {
    qDebug() << count;
    count++;
    thread()->msleep(1000);
  }

  emit finished();
}


Первые 20-30 секунд doWork() работает нормально, вывод происходит каждую секунду, затем вывод замедляется и происходит раз в 5-10 секунд, как будто macOS понижает приоритет процесса или что-то вроде этого. В чем может быть причина? Пробовал запускать от рута, повышать приоритет потока, не помогает. На Linux подобный код работает нормально.
  • Вопрос задан
  • 261 просмотр
Пригласить эксперта
Ответы на вопрос 1
IGHOR
@IGHOR Куратор тега Qt
Qt/C++ DEV/CTO
Попробуйте использовать таймер с QEventLoop вместо msleep.
Лучше подключать QThread::finished() а не worker в deleteLater().
Да и a.exec(); сам по себе не будет ждать тех сигналов удаления, надо еще thread->wait() после a.exec() а потом уже return 0;
Ответ написан
Ваш ответ на вопрос

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

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