Thread refuses to quit



  • It is supposed to stop in myobject.cpp with QThread::currentThread()->quit(); but it doesn't.

    main.cpp:
    @#include <QCoreApplication>
    #include <QtCore>
    #include "myobject.h"

    QThread* cThread;
    MyObject* cObject;

    int main(int argc, char *argv[])
    {
    QCoreApplication a(argc, argv);
    cThread = new QThread();
    cObject = new MyObject();
    cObject->moveToThread(cThread);

    QObject::connect(cThread, SIGNAL(started()),
                     cObject, SLOT(doWork()));
    
    QObject::connect(cThread, SIGNAL(finished()),
                     cThread, SLOT(deleteLater()));
    
    QObject::connect(cThread, SIGNAL(finished()),
                     cObject, SLOT(deleteLater()));
    
    cThread->start();
    
    return a.exec&#40;&#41;;
    

    }@

    myobject.cpp:
    @#include "myobject.h"

    MyObject::MyObject(QObject *parent) :
    QObject(parent)
    {
    }

    void MyObject::doWork()
    {
    qDebug() << "Hi";
    QThread::currentThread()->quit(); // It is supposed to stop here, but it doesn't.
    for (int i = 0; i < 1000000; i++) {
    qDebug() << i;
    }
    }@

    myobject.h:
    @#ifndef MYOBJECT_H
    #define MYOBJECT_H

    #include <QtCore>

    class MyObject : public QObject
    {
    Q_OBJECT
    public:
    explicit MyObject(QObject *parent = 0);

    signals:

    public slots:
    void doWork();

    };

    #endif // MYOBJECT_H@



  • bq. void QThread::quit() [slot]
    Tells the thread's event loop to exit with return code 0 (success). Equivalent to calling QThread::exit(0).

    Processing must return to the event loop before it can exit, which does not happen until your million debug messages are emitted.


  • Moderators

    To clarify ChrisW67's point: Qt will not stop your thread in the middle of a function. If your thread got the "quit" command in the middle of doWork(), the thread will wait until doWork() returns before quitting.

    Terminating a thread in the middle of a function is dangerous and can cause data corruption.


Log in to reply
 

Looks like your connection to Qt Forum was lost, please wait while we try to reconnect.