之间有什么区别
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。
答案 0 :(得分:5)
第一个创建一个线程对象,您必须在某个时刻分离或连接。
第二个创建并销毁一个临时线程,因为你没有分离或加入它而终止程序。 Boost允许在破坏时自动分离线程;但是这种行为会导致细微的错误,因此标准库会强制您做出明确的选择。
如果你真的想要“一见不醒”的话,你可以做到
std::thread( &MyClass::MyMemberFunction, myClass ).detach();
但通常最好让线程对象在适当的时候加入,特别是如果你计划在某个时候delete myClass
。