这涉及到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线程的设计思想在这一点上存在差异。
博客主要介绍了C++与Qt在线程设计上的差异。C++11及之后标准中,线程构造函数会立即启动线程,线程生命周期与对象绑定,无需显式调用启动方法;而Qt中需将子类对象移到新线程,通过特定方法启动线程,这源于两者线程模型设计思想不同。
6601

被折叠的 条评论
为什么被折叠?



