Comment émettre de la croix-fil de signal dans Qt?

Qt documentation indique que les signaux et les slots peuvent être direct, queued et auto.

Il a également déclaré que si l'objet qui possède la fente " vit " dans un thread différent de l'objet qui possède signal, émission de ces signaux sera comme message d'affectation de signal d'émettre sera de retour instantanément et fente méthode sera appelée dans le thread cible de la boucle d'événements.

Malheureusement, la documentation ne précise pas que les "vies" et pas d'exemples est disponible. J'ai essayé le code suivant:

main.h:

class CThread1 : public QThread
{
Q_OBJECT
public:
    void run( void )
    {
        msleep( 200 );
        std::cout << "thread 1 started" << std::endl;
        MySignal();
        exec();
    }
signals:
    void MySignal( void );
};

class CThread2 : public QThread
{
Q_OBJECT
public:
    void run( void )
    {
        std::cout << "thread 2 started" << std::endl;
        exec();
    }
public slots:
    void MySlot( void )
    {
        std::cout << "slot called" << std::endl;
    }
};

main.cpp:

int main(int argc, char *argv[])
{
    QCoreApplication a(argc, argv);
    CThread1 oThread1;
    CThread2 oThread2;
    QObject::connect( & oThread1, SIGNAL( MySignal() ),
        & oThread2, SLOT( MySlot() ) );
    oThread1.start();
    oThread2.start();
    oThread1.wait();
    oThread2.wait();
    return a.exec();
}

De sortie est:

thread 2 started
thread 1 started

MySlot() n'est jamais appelée :(. Ce que je fais mal?

InformationsquelleAutor grigoryvp | 2009-03-12