[Solved]Can't receive signal from another thread



  • Can't receive signal from another thread as following.
    Using connect type as Qt::BlockingQueuedConnection, the thread blocks. But signal not received.

    main.cpp :

    @#include "myclass.h"

    int main(int argc, char *argv[])
    {
    QCoreApplication a(argc, argv);
    MyClass myClass;
    myClass.startAll();
    return a.exec();
    }
    @

    thread.h :

    @
    #include <QtCore/QCoreApplication>
    #include <QThread>
    #include <QDebug>

    class Thread1 : public QThread
    {
    Q_OBJECT
    public:
    void run( void )
    {
    qDebug() << "thread 1 started";
    int i = 0;
    while(1)
    {
    msleep( 10 );
    i++;
    qDebug() << "i is: " + QString::number(i);
    if(i==1000)
    {
    qDebug() << "Got I";
    emit MyThread1Signal();
    exit();
    }
    }
    }
    signals:
    void MyThread1Signal();
    };@

    myclass.cpp :

    @
    MyClass::MyClass(QObject *parent) :
    QObject(parent)
    {
    thread1 = new Thread1();
    connect(thread1, SIGNAL(MyThread1Signal()), this, SLOT(myClassSlot1()), Qt::BlockingQueuedConnection);
    }

    void MyClass::startAll()
    {
    thread1->start();
    thread1->wait();
    }

    void MyClass::myClassSlot1()
    {
    qDebug()<<"Signal received";
    }@

    myclass.h :

    @
    #ifndef MYCLASS_H
    #define MYCLASS_H

    #include <QObject>

    #include "threads.h"

    class MyClass : public QObject
    {
    Q_OBJECT
    public:
    explicit MyClass(QObject *parent = 0);
    void startAll();

    signals:

    public slots:
    void myClassSlot1();

    private:
    Thread1* thread1;
    };

    #endif // MYCLASS_H
    @

    [edit: please add @ code tags. Did it for you, Eddy]



  • Things I will try:

    1. move the connect from the constructor to the startAll method, between the start and wait of the thread
    2. change the exit with a simple return
    3. leave the connection in automatic mode (remove blocked queue).

    But I'm totally not sure about any of them.



  • Change exit to return works. (Or remove wait() after start())

    For these prevent thread from sleep or terminate.

    Thanks.


Log in to reply
 

Looks like your connection to Qt Forum was lost, please wait while we try to reconnect.