Como emitir sinal cross-thread no Qt?

documentação @Qt afirma que sinais e slots podem serdirect, queued eauto.

Também afirmou que, se o objeto que possui o slot 'vive' em um segmento diferente do objeto que possui o sinal, emitir esse sinal será como postar uma mensagem - o sinal de emissão retornará instantaneamente e o método do slot será chamado no loop de eventos do segmento de destin

Infelizmente, a documentação não especifica que 'vidas' representa e não há exemplos disponíveis. Eu tentei o seguinte 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 é:

thread 2 started
thread 1 started

MySlot() nunca é chamado :(. O que estou fazendo de errado?

questionAnswers(3)

yourAnswerToTheQuestion