J'ai un thread principal pour l'interface graphique, dans lequel est exécuté l'objet MainWindow
, dans son constructeur, je crée un nouvel objet de travail et un objet QThread
et je déplace le travailleur vers le fil , le problème est que lors de l'impression leurs papiers d'identité, ils sont les mêmes:QThread moveToThread ne fonctionne pas
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;
}
je reçois:
MAIN_ID 0x7f4009ccb780
INITIALIZE 0x7f4009ccb780
Quel est le problème?
Mais lorsque la classe worker est appelée via connect SLOT/SIGNAL, les ID imprimés sont différents –
Lorsque vous appelez une fonction directement, elle s'exécute dans le thread à partir duquel vous l'appelez. – thuga
Définissez initialize() comme emplacement et émettez un signal à partir de MainWindow.Connectez-les comme ceci: connect (this, SIGNAL (signal_initialize()), pc_w, SLOT (initialize()), Qt :: QueuedConnection); –