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

时间:2015-04-03 17:16:03

标签: c++ multithreading boost std

之间有什么区别
MyClass* myClass = new MyClass;
std::thread myThread( &MyClass::MyMemberFunction, myClass );

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

P.S。尝试使用第二种方法将boost :: asio :: io_service放入单独的线程中 - 不起作用。但第一个确实如此。如果将标准更改为提升,这两种方法都有效。

WIndows 7. MSVS 12.0。

1 个答案:

答案 0 :(得分:5)

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

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

如果你真的想要“一见不醒”的话,你可以做到

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

但通常最好让线程对象在适当的时候加入,特别是如果你计划在某个时候delete myClass