zoukankan      html  css  js  c++  java
  • Qt实现指定线程执行回调


    说明

    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();
        }
    };
  • 相关阅读:
    jQuery 选择器 与 事件
    JavaScript 语法
    Java 包(package)
    Java 接口
    java封装继承多态---继承篇
    Java数组的学习
    java基础周总结
    JAVA基础接口集合框架
    周总结
    Java基础
  • 原文地址:https://www.cnblogs.com/danju/p/5036015.html
Copyright © 2011-2022 走看看