启动没有线程实例名称的线程

Start thread without thread instance name

本文关键字:线程 实例 启动      更新时间:2023-10-16

之间有什么区别

MyClass* myClass = new MyClass;
std::thread myThread( &MyClass::MyMemberFunction, myClass );

std::thread( &MyClass::MyMemberFunction, myClass );

附言:试图使用第二种方法将boost::asio::io_service放入单独的线程是行不通的。但第一个确实如此。如果将std更改为boost,这两种方法都有效。

窗口7。MSVS 12.0。

第一个创建一个线程对象,您必须在某个点分离或连接该对象。

第二个创建并销毁一个临时线程,因为你没有分离或加入程序而终止程序。Boost允许这样做,在销毁时自动分离线程;但这种行为可能会导致细微的错误,因此标准库会迫使您做出明确的选择。

如果你真的想要一个"火和忘记"线程,你可以做

std::thread( &MyClass::MyMemberFunction, myClass ).detach();

但通常最好让线程对象在合适的时间加入,尤其是当您计划在某个时刻加入delete myClass时。