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();
}
问问题
214 次