这涉及到C++标准库中的std::thread
和Qt中的QThread
的设计差异。
在C++11及之后的标准中,std::thread
的构造函数会立即启动线程,并且线程的生命周期与std::thread
对象绑定。因此,在使用std::thread
时,不需要显式调用类似"start"的方法。
而在Qt中,QThread
的设计有些不同。QThread
的实例本身并不执行线程函数,而是通过将一个QObject
子类对象移到新线程中来实现线程执行。QThread
的start
方法会调用QObject
的moveToThread
方法,将QObject
子类对象移到QThread
所代表的线程中,并在那个线程中执行它的事件循环。因此,需要调用start
方法来启动线程。
简而言之,std::thread
在构造时就启动线程,而QThread
在构造后需要通过start
方法将一个QObject
子类对象移到线程中以启动线程。这是因为Qt的线程模型和C++11线程的设计思想在这一点上存在差异。