我可以使用QTimer实现多线程算法

Can I use QTimer to implement a multthreaded algorithm?

本文关键字:多线程 算法 实现 QTimer 可以使 我可以      更新时间:2023-10-16

目前我需要实现一个基于Qt的多线程算法,也许我应该尝试扩展QThread。但在此之前,我想问一下,我是否可以使用两个QTimer, timer1, timer2,并将它们的超时信号分别连接到线程,实现一个"假"多线程程序?

可以将QTimer的timeout()信号连接到相应的槽位,调用start()。从那时起,计时器将以固定的间隔发出timeout()信号。但是这两个计时器分别在主线程和主事件循环中运行。所以你不能叫它多线程。因为两个插槽不能同时运行。它们一个接一个地运行,如果一个阻塞主线程,另一个将永远不会被调用。

你可以有一个真正的多线程应用程序,为不同的任务提供一些类,这些任务应该并发完成,并使用QObject::moveToThread来改变对象的线程亲和力:

 QThread *thread1 = new QThread();
 QThread *thread2 = new QThread();
 Task1    *task1   = new Task1();
 Task2    *task2   = new Task2();
 task1->moveToThread(thread1);
 task2->moveToThread(thread2);
 connect( thread1, SIGNAL(started()), task1, SLOT(doWork()) );
 connect( task1, SIGNAL(workFinished()), thread1, SLOT(quit()) );
 connect( thread2, SIGNAL(started()), task2, SLOT(doWork()) );
 connect( task2, SIGNAL(workFinished()), thread2, SLOT(quit()) );
 //automatically delete thread and task object when work is done:
 connect( thread1, SIGNAL(finished()), task1, SLOT(deleteLater()) );
 connect( thread1, SIGNAL(finished()), thread1, SLOT(deleteLater()) );
 connect( thread2, SIGNAL(finished()), task2, SLOT(deleteLater()) );
 connect( thread2, SIGNAL(finished()), thread2, SLOT(deleteLater()) );
 thread1->start();
 thread2->start();

注意Task1Task2继承自QObject