首页 > 编程语言 > 详细

Qt实现指定线程执行回调

时间:2015-12-10 14:50:43      阅读:241      评论:0      收藏:0      [点我收藏+]


说明

  1. 同线程时,直接调用回调(block参数没意义)
  2. 创建invoker所在的线程,需要有Qt的消息循环(比如UI线程)


直接上代码

typedef std::function<void()> InvokerFunc;
class Invoker: public QObject
{
    Q_OBJECT
public:
    Invoker(QObject *parent=0):
        QObject(parent)
    {
        qRegisterMetaType<InvokerFunc>("InvokerFunc");
    }

    void execute(const InvokerFunc &func, bool block)
    {
        if (QThread::currentThread()==thread())
        {//is same thread
            func();
            return;
        }
        if (block)
        {
            metaObject()->invokeMethod(this, "onExecute", Qt::BlockingQueuedConnection,
                                       Q_ARG(InvokerFunc, func));
        }
        else{
            metaObject()->invokeMethod(this, "onExecute", Qt::QueuedConnection,
                                       Q_ARG(InvokerFunc, func));
        }
    }

private slots:
    void onExecute(const InvokerFunc &func)
    {
        func();
    }
};

 

Qt实现指定线程执行回调

原文:http://www.cnblogs.com/danju/p/5036015.html

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!