gpt4 book ai didi

c++ - Qt C++ moveToThread() 方法

转载 作者:太空宇宙 更新时间:2023-11-04 15:46:03 25 4
gpt4 key购买 nike

我刚刚开始在 Windows 上使用 Qt 并阅读了有关 moveToThread() 函数的信息。如果我这样写可以吗:

class Worker : public QObject
{
Q_OBJECT
private:
QThread* thread;
public:
void GoToThread() {
thread = new QThread();
this->moveToThread(thread);
}
void DoWork() {
//long work
}
};

Worker* w = new Worker();
w->GoToThread();
w->DoWork();

这段代码究竟会做什么?它会把自己放到线程中吗?我可以在外面调用 DoWork() 吗?

最佳答案

在您提供的示例中,DoWork() 将在调用者的线程上执行。

如果你想让 DoWork()Worker 对象的线程上完成,你应该让 DoWork() 成为一个槽,它可以通过发出它已连接到的信号或通过调用 QMetaObject::invokeMethod() 来“调用”它来调用。

基本上,将 Q_OBJECT 移动到另一个线程会使 Q_OBJECT 使用与该线程关联的事件队列,因此通过事件队列传递给该对象的任何事件都将被在该线程上处理。

关于c++ - Qt C++ moveToThread() 方法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16436296/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com