您的位置:首页 > 编程语言 > Qt开发

Qt实现指定线程执行回调

2015-12-10 14:45 1001 查看
说明

同线程时,直接调用回调(block参数没意义)

创建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();
}
};
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: