我可以使用QTimer实现多线程算法
Can I use QTimer to implement a multthreaded algorithm?
目前我需要实现一个基于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();
注意Task1
和Task2
继承自QObject
相关文章:
- 在C++中使用cURL和多线程
- 多线程双缓冲区
- 为什么我的多线程作业队列崩溃
- 在main()之外初始化std::vector会导致性能下降(多线程)
- 试图创建一个多线程程序来查找0-100000000之间的总素数
- 为什么一个向量上的多线程操作很慢
- 学习多线程C++:添加线程不会使执行速度更快,即使它看起来应该
- 全局变量 多读取器 一个写入器多线程安全?
- C++ 多线程 - 与线程合并排序的算法替代
- OpenMP:共享同一算法的单线程和多线程实现
- C++多线程算法创建在同一 CPU 线程上运行的多个线程
- 多线程 - 彼得森算法不起作用
- 多线程galib247遗传算法陷入局部极大值
- C++ STL 算法(列表排序)OpenMP/多线程实现
- 为什么这种令人尴尬的并行算法的性能没有随着多线程而提高
- 多线程数独算法c++
- 面向通知-等待模式的c++多线程算法设计
- 我可以使用QTimer实现多线程算法
- 多线程二进制树算法
- 高效实现多线程排序算法的关键是什么?幼稚的实现无法正常工作