欢迎来到Doc100.Net免费学习资源知识分享平台!
您的位置:首页 > 程序异常 >

关于qt中跨线程的信号处理有关问题,求大神

更新时间: 2014-01-05 02:43:49 责任编辑: Author_N1

 

关于QT中跨线程的信号处理问题,求大神!
说明如下:
1. Receiver对象生存在主线程,主线程拥有事件循环;
2. Receiver对象生存期足够长;
3. connect函数调用成功,连接类型缺省为autoConnection, 对于跨线程的信号,将会自动使用队列连接;
4. 信号确实发送,emit threadSignal();语句确实执行了;
5. Receiver对象所在线程(主线程)界面响应正常,事件循环没有阻塞;
6. 问题是槽函数从来都没有执行过?纠结其原因。。。

望大神解惑


class MyThread : public QThread
{
    Q_OBJECT

public:
    MyThread();

    void run()
    {
        emit threadSignal();
    }

signals:
    void threadSignal();
};


class Receiver : public QObject
{
    Q_OBJECT

public:
    Receiver()
    {
        MyThread * thread = new MyThread;
        connect(thread, SIGNAL(threadSignal()), this, SLOT(slotFunc()));
        thread->start();
    }

private slots:
    void slotFunc()
    {
        qDebug() << "receive one signal.";
    }
};


--参考方法--
引用:
说明如下:
1. Receiver对象生存在主线程,主线程拥有事件循环;
2. Receiver对象生存期足够长;
3. connect函数调用成功,连接类型缺省为autoConnection, 对于跨线程的信号,将会自动使用队列连接;
4. 信号确实发送,emit threadSignal();语句确实执行了;
5. Receiver对象所在线程(主线程)界面响应正常,事件循环没有阻塞;
6. 问题是槽函数从来都没有执行过?纠结其原因。。。

望大神解惑


class MyThread : public QThread
{
    Q_OBJECT

public:
    MyThread();

    void run()
    {
        emit threadSignal();
    }

signals:
    void threadSignal();
};


class Receiver : public QObject
{
    Q_OBJECT

public:
    Receiver()
    {
        MyThread * thread = new MyThread;
        connect(thread, SIGNAL(threadSignal()), this, SLOT(slotFunc()));
        thread->start();
    }

private slots:
    void slotFunc()
    {
        qDebug() << "receive one signal.";
    }
};



其实你可以去看下Qt的帮助文档是怎么实现多线程的,看了你就懂了。
http://qt-project.org/doc/qt-5.0/qtcore/qthread.html
上一篇:上一篇
下一篇:下一篇

 

随机推荐程序问答结果

 

 

如对文章有任何疑问请提交到问题反馈,或者您对内容不满意,请您反馈给我们DOC100.NET论坛发贴求解。
DOC100.NET资源网,机器学习分类整理更新日期::2014-01-05 02:43:49
如需转载,请注明文章出处和来源网址:http://www.doc100.net/bugs/t/13625/
本文WWW.DOC100.NET DOC100.NET版权所有。