代码之家  ›  专栏  ›  技术社区  ›  Bob

为什么在QThread(事件循环)之外对QTimer::start()的调用没有失败?

  •  0
  • Bob  · 技术社区  · 5 年前

    这个 documentation says

    在多线程应用程序中,可以在任何线程中使用QTimer 有一个事件循环。要从非GUI线程启动事件循环,请使用 哪个线程将发出timeout()信号。 启动和停止线程中的计时器;无法启动 另一个线程的计时器。

    int main(int argc, char *argv[])
    {
      QCoreApplication app(argc, argv);
      QTimer timer;
      timer.start(1000);
    
      app.exec();
    
    }
    

    start ,不是 QThread Timers can only be used with threads started with QThread

    问题

    为什么不失败?

    0 回复  |  直到 5 年前
        1
  •  3
  •   eyllanesc RAHUL KUMAR    5 年前


    在多线程应用程序中,可以在任何具有事件循环的线程中使用QTimer。

    你在哪里使用的QTimer有事件循环吗? 是的,您正在主线程中使用QTimer,并且已经通过qxa应用程序创建了事件循环。

    主线程是非GUI线程吗? 不,因此在本例中不必使用QThread在主线程中使用QTimer。

    在什么情况下QTimer会失败? 如果QTimer在主线程中运行而您没有创建QXApplication,或者如果您在没有Qt事件循环的线程中运行它作为std::thread。