GUIのメインスレッドがあります。MainWindow
オブジェクトが実行されています。 のコンストラクタに新しいワーカーオブジェクトとQThread
オブジェクトが作成され、ワーカーがスレッドに移動しますQThreadのmoveToThreadが機能しません
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
:、問題は、そのIDを印刷するときに、それらが同じであるということですworker::worker(QObject *parent) : QObject(parent) {
}
void worker::initialize() {
std::cout << "INITIALIZE " << QThread::currentThreadId() << std::endl;
}
私が取得:
MAIN_ID 0x7f4009ccb780
INITIALIZE 0x7f4009ccb780
間違っているのですか?
しかし、SLOT/SIGNALを使用してワーカークラスを呼び出すと、印刷されたIDが異なります –
関数を直接呼び出すと、呼び出し元のスレッドで関数が実行されます。 – thuga
initialize()をスロットとして定義し、MainWindowからシグナルを出します。connect(this、SIGNAL(signal_initialize())、pc_w、SLOT(initialize())、Qt :: QueuedConnection)のように接続します。 –