【问题标题】:Start thread without thread instance name启动没有线程实例名称的线程
【发布时间】:2015-04-03 17:16:03
【问题描述】:

有什么区别

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

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

?

附:尝试使用第二种方法将 boost::asio::io_service 放入单独的线程中 - 不起作用。但第一个可以。如果将 std 更改为 boost,这两种方法都有效。

Windows 7.MSVS 12.0。

【问题讨论】:

    标签: c++ multithreading boost std


    【解决方案1】:

    第一个创建一个线程对象,你必须在某个时候分离或加入。

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

    如果你真的想要一个“一劳永逸”的话题,你可以这样做

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

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2014-04-06
      • 1970-01-01
      • 2021-08-03
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多