How to run a timer inside a QThread?

前端 未结 4 1452
长情又很酷
长情又很酷 2020-12-30 15:52

I would like to run a timer inside a QThread. I have written some code in which i am getting some error during the run time. Please guide me into the right direction. What a

4条回答
  •  难免孤独
    2020-12-30 16:17

    In order to do this, you need to have event loop in your thread.

    From QTimer's man page:

    In multithreaded applications, you can use QTimer in any thread that has an event loop. To start an event loop from a non-GUI thread, use QThread::exec(). Qt uses the timer's thread affinity to determine which thread will emit the timeout() signal. Because of this, you must start and stop the timer in its thread; it is not possible to start a timer from another thread.

    From QThread's man page:

    int QThread::exec () [protected]

    Enters the event loop and waits until exit() is called, returning the value that was passed to exit(). The value returned is 0 if exit() is called via quit(). It is necessary to call this function to start event handling.

    Also, you need to have Q_OBJECT in your class:

    class MyThread:public QThread
    {
        Q_OBJECT
    

    And finally, as Dmitry noted, you need to create QTimer inside your thread, so the entire cpp file should look like this:

    #include "mythread.h"
    
    MyThread::MyThread()
    {       
    }
    
    void MyThread::run()
    {
        thr= new QTimer();
        connect(thr,SIGNAL(timeout()),this,SLOT(slo()));
        thr->start(1000);
        exec();
    }
    
    void MyThread::slo()
    {
        int i = 0,j=0;
        i=i+j;
    }
    

    Also, read this document.

提交回复
热议问题