-1
struct C : public QObject
{
    Q_OBJECT

public:

    C()
    {
        qDebug()<<"C()";

        //connect(this,SIGNAL(cs()),this,SLOT(cl2()),Qt::QueuedConnection);
    }

    ~C(){qDebug()<<"~C()";}

signals:

    void cs();

public slots:

    void cl()
    {
        //it seems this signal will be emited only when the following loop finished
        //the output is :
        // cl2 ......... cl2 obj ..........obj
        // which means that the sub-thread not work simultaneously with the main thread
        // but if i move the bold line to cl2 function  and add 
        // connect(this,SIGNAL(cs()),this,SLOT(cl2()),Qt::QueuedConnection); to constructor
        // its output will be:
        // cl2 ... cl2 ..obj ..obj... cl2...obj...... 
        // which mean that main thread and sub-thread work concurrently.
        // any idea about it?  

        emit cs(); 
        for (int i=0;i<=1000000;++i)
            qDebug()<<"cl2";
    }

    void cl2()
    {
        //for (int i=0;i<=1000000;++i)
        //    qDebug()<<"cl2";
    }
};

struct Obj : public QObject
{
    Q_OBJECT

public:

    Obj(){qDebug()<<"Obj()";}

    ~Obj(){qDebug()<<"~Obj()";}

public slots:

    void ol()
    {
        for (int i=0;i<=10000000;++i)
            qDebug()<<"Obj";
    }
};

int main(int argc,char* argv[])
{
        QApplication app(argc, argv);

        QThread th;

        C * c=new C;

        Obj *o=new Obj;

        c->moveToThread(&th);

        th.start();

        QObject::connect(c,SIGNAL(cs()),o,SLOT(ol()),Qt::QueuedConnection);

        c->cl();

        QTimer::singleShot(300,&app,SLOT(quit()));

        app.exec();
}
Christian Rau
  • 45,360
  • 10
  • 108
  • 185
camino
  • 10,085
  • 20
  • 64
  • 115

1 Answers1

0

Both methods are executed in main thread: cl() is executed in main thread, because it is called from main thread, ol() is executed in the main thread due to o in the main thread && QueuedConnection.

When you change your code to version, that is commented, execution of cl2() moves to th thread.

Lol4t0
  • 12,444
  • 4
  • 29
  • 65