如何将类中的方法添加到要执行的线程中?
我不想将“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();
}
答案 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)
答案 2 :(得分:0)
如果要在另一个线程中运行单个函数,则应该检查QtConcurrent
命名空间中的方法。