我想知道是否可以使用 QEventLoop (QProcess?) 来并行化对 Qt 同一函数的多个调用。QtConcurrent 或 QThread 究竟有什么区别?更准确地说,什么是流程和事件循环?我读到 QCoreApplication 必须在 main() 方法中尽早 exec() ,所以我想知道为什么它与主线程不同。
您能否指出对 Qt 进程和线程的一些有效参考?我是通过官方文档来的,这些事情仍然不清楚。
谢谢并恭祝安康。
我想知道是否可以使用 QEventLoop (QProcess?) 来并行化对 Qt 同一函数的多个调用。QtConcurrent 或 QThread 究竟有什么区别?更准确地说,什么是流程和事件循环?我读到 QCoreApplication 必须在 main() 方法中尽早 exec() ,所以我想知道为什么它与主线程不同。
您能否指出对 Qt 进程和线程的一些有效参考?我是通过官方文档来的,这些事情仍然不清楚。
谢谢并恭祝安康。
进程和线程不是 Qt 特定的概念。您可以在任何地方搜索“进程与线程”以解释该区别。例如:线程之间共享哪些资源?
尽管相关概念,但与在现有进程中生成新线程相比,生成新进程是一种更“重量级”的并行形式。默认情况下,进程相互保护,而进程内的执行线程可以直接读取和写入彼此的内存。从生成进程中获得的保护会带来更大的运行时成本……而且由于独立进程无法读取彼此的内存,因此您必须使用进程间通信的方法在它们之间共享数据。
奇怪的是你想要线程,因为在一个程序中编写所有代码的情况下它们更容易使用。考虑到多线程编程的所有复杂性,我建议先看一本好书或阅读一些网站。请参阅:学习线程编程有哪些好的资源?
但是,如果您想深入了解 Qt 中的线程外观,您可以花时间查看示例:
http://qt-project.org/doc/qt-4.8/examples-threadandconcurrent.html
QtConcurrent 是一个抽象库,可以更轻松地实现某些类型的并行编程模式。它建立在 QThread 抽象之上,没有什么可以做的是你不能通过直接写入 QThread 来编写自己的代码。但这可能会使您的代码更容易编写并且不易出错。
至于事件循环......这只是程序中任何给定执行线程如何等待工作项处理、处理它们并决定何时不再需要它的通用术语。如果一个线程的工作仅仅是启动,做一些数学运算,然后退出……那么它就不需要事件循环。但是启动和停止线程需要时间并且会搅动资源。所以通常线程的生存时间更长,并且有一个事件循环知道如何等待它需要响应的事件。
如果您构建在 QtConcurrent 之上,您将不必担心工作线程中的事件循环,因为它们是在线程池中自动管理的。字数统计示例非常简单:
http://qt-project.org/doc/qt-4.8/qtconcurrent-wordcount-main-cpp.html