¿Cómo emitir una señal de hilo cruzado en Qt?

a documentación de @Qt establece que las señales y las ranuras pueden serdirect, queued yauto.

También indicó que si el objeto que posee la ranura 'vive' en un hilo diferente del objeto que posee la señal, la emisión de dicha señal será como publicar un mensaje: la emisión de la señal regresará instantáneamente y se llamará al método de la ranura en el bucle de eventos del hilo objetivo.

Desafortunadamente, la documentación no especifica que 'vidas' significa y no hay ejemplos disponibles. He intentado el siguiente código:

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();
}

Output es:

thread 2 started
thread 1 started

MySlot() nunca se llama :(. ¿Qué estoy haciendo mal?

Respuestas a la pregunta(3)

Su respuesta a la pregunta