【发布时间】:2017-08-10 07:02:55
【问题描述】:
我有一个用于 GUI 的主线程,在其中运行 MainWindow 对象,
在其构造函数中,我创建了一个新的 worker 对象和一个 QThread 对象,然后我将 worker 移动到线程,问题是在打印它们的 id 时它们是相同的:
MainWindow.cpp
MainWindow::MainWindow(QWidget *parent) :
QMainWindow(parent),
ui(new Ui::MainWindow)
{
std::cout<<"MAIN_ID "<< QThread::currentThreadId()<<std::endl;
QThread *t_pc = new QThread;
worker *pc_w;
pc_w = new pc_worker();
pc_w->moveToThread(t_pc);
t_pc->start();
pc_w->initialize();
// ...
}
worker.cpp
worker::worker(QObject *parent) : QObject(parent) {
}
void worker::initialize() {
std::cout << "INITIALIZE " << QThread::currentThreadId() << std::endl;
}
我明白了:
MAIN_ID 0x7f4009ccb780
INITIALIZE 0x7f4009ccb780
怎么了?
【问题讨论】:
-
但是,当通过connect SLOT/SIGNAL调用worker类时,打印的ID是不同的
-
当你直接调用一个函数时,它会在你调用它的线程中运行。
-
将 initialize() 定义为一个槽,并从 MainWindow 发出一个信号。像这样连接它们:connect(this, SIGNAL(signal_initialize()), pc_w, SLOT(initialize()), Qt::QueuedConnection);
标签: c++ multithreading qt qthread