想将方法放入 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的主要内容,如果未能解决你的问题,请参考以下文章

我想将数组的内容放入 h3 元素中,然后将其放入其容器中

我想将 JSONObject 放入 JSONArray 内 for 循环

我想将 Latlng 值放入 Firebase 的 Google 地图中,但出现错误

我想将变量放入Google Piechart中,但它会不断从选择中选择最后的内容

将文本框放入数组中

如何使用 CSS 将图像放入 div 中?