想要将方法放入QThread

时间:2013-06-21 17:52:05

标签: c++ qt qthread

如何将类中的方法添加到要执行的线程中?

我不想将“Pup”放入一个继承QThread的单独类中,因为这只是我正在处理的一些Legacy代码的抽象。

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();
}

3 个答案:

答案 0 :(得分:3)

试试这个:

void Dog::Init()
{
     QThread *dogThread = new QThread;
     connect(dogThread, SIGNAL(started()), this, SLOT(Pup()), Qt::DirectConnection);
     dogThread->start();
}

它基本上创建了一个名为QThread的新dogThread,并将它的started()信号连接到您想要在线程内运行的方法(Dog::Pup(),它必须是一个插槽)

当您使用Qt::QueuedConnection时,将在接收者的线程中执行插槽,但是当您使用Qt::DirectConnection时,将立即调用插槽,并且因为started()dogThread发出{1}},也会从dogThread调用该广告位。您可以在此处找到有关连接类型的更多信息:Qt::ConnectionType

答案 1 :(得分:0)

阅读页面http://doc.qt.io/qt-5/qthread.html

中的详细说明

答案 2 :(得分:0)

如果要在另一个线程中运行单个函数,则应该检查QtConcurrent命名空间中的方法。