想将方法放入 QThread
Posted
技术标签:
【中文标题】想将方法放入 QThread【英文标题】:Want to put a method into a QThread 【发布时间】:2013-06-21 17:52:05 【问题描述】:如何将类中的方法添加到线程中执行?
我不想将“Pup”放入继承 QThread 的单独类中,因为这只是我正在处理的一些遗留代码的抽象。
void Dog::Pup()
printf("pup");
void Dog::Init()
QThread *dogThread = new QThread();
Pup->moveToThread(dogThread); //this is all wrong
Pup->connect(dogThread, ?, Pup, SLOT(Pup), ?)
dogThread.start();
【问题讨论】:
Everyone is just crazy about this little article。希望对您有所帮助! 那篇文章采用的是一个类,而不是一个方法,并将其添加到 qthread。我以前读过这个,这种方法不适用于我正在处理的代码。 【参考方案1】:试试这个:
void Dog::Init()
QThread *dogThread = new QThread;
connect(dogThread, SIGNAL(started()), this, SLOT(Pup()), Qt::DirectConnection);
dogThread->start();
它基本上创建了一个名为dogThread
的新QThread
并将它的started()
信号连接到您要在线程内运行的方法(Dog::Pup()
必须是一个槽)。
当你使用Qt::QueuedConnection
时,槽会在接收者的线程中执行,但是当你使用Qt::DirectConnection
时,槽会立即被调用,因为started()
是从dogThread
发出的,所以槽会也可以从dogThread
调用。您可以在此处找到有关连接类型的更多信息:Qt::ConnectionType。
【讨论】:
【参考方案2】:如果您想在另一个线程中运行单个函数,您应该检查 QtConcurrent
命名空间中的方法。
【讨论】:
【参考方案3】:阅读页面http://doc.qt.io/qt-5/qthread.html中的详细说明
【讨论】:
以上是关于想将方法放入 QThread的主要内容,如果未能解决你的问题,请参考以下文章
我想将 JSONObject 放入 JSONArray 内 for 循环
我想将 Latlng 值放入 Firebase 的 Google 地图中,但出现错误