class Z: public QThread{signals: void signal1()public: Z(); ~Z(); void slotFunc1();protected: void run();}Z::Z(){}Z::~Z(){}void Z::run(){ exec();// !!! //тут какие нить действия (и даже может быть в "бесконечном" цикле) ... действие 1 ... действие 2 ... действие N}void Z::slotFunc1(){ //тут какие нить действия ... действие 1 ... действие 2 ... действие N //тут емиттим сигнал emit signal1();}
C++ (Qt)Z * z = new Z;connect( this, SIGNAL(mySignal()), z, SLOT(slotFunc()) );z->start();...emit mySignal();
C++ (Qt)connect( this, SIGNAL(mySignal()), z, SLOT(slotFunc()), Qt::QueuedConnection );
public slots: void slotFunc1();
int main(int argc, char *argv[]){ QApplication app(argc, argv); //printf("curr TID = %d\n",currentThreadId()); return app.exec();}
int main(int argc, char *argv[]){ QApplication app(argc, argv); printf("curr TID = %d\n",(int)QThread::currentThreadId()); return app.exec();}
Cint main(int argc, char *argv[]){ QApplication app(argc, argv); qWarning() << "curr TP:" << QThread::currentThread(); qWarning() << "curr TID:" << QThread::currentThreadId(); return app.exec();}
class A : public QThread{ Q_OBJECTsignals: void sgFromA();public slots: void slotA() {}protected: void run() { sleep(2); qWarning() << "A::run() -> TID = " << QThread::currentThreadId(); emit sgFromA(); exec(); }};class B: public QThread{ Q_OBJECT/*signals: void sgFromB();*/public slots: void slotB() { qWarning() << "B::slotB() -> TID = " << QThread::currentThreadId(); }protected: void run() { qWarning() << "B::run() -> TID = " << QThread::currentThreadId(); exec(); }};
int main(int argc, char *argv[]){ QCoreApplication app(argc, argv); //qWarning() << "App TP:" << QThread::currentThread(); qWarning() << "Application -> TID = " << QThread::currentThreadId(); QThread *tA = new A; QThread *tB = new B; app.connect(tA, SIGNAL(sgFromA()), tB, SLOT(slotB()), Qt::QueuedConnection); tA->start(); tB->start(); return app.exec();}