如何将boost :: shared_ptr作为指向Windows Thread函数的指针传递?

Beh*_*z.M 5 c++ windows boost shared-ptr beginthreadex

如何将boost :: shared_ptr作为指向Windows Thread函数的指针传递?假设以下代码:

test::start()
{
    ....
    _beginthreadex( NULL, 0, &test::threadRun, &shared_from_this(), 0, &threadID );

    ...
    ...
}

/*this is a static function*/
UINT __stdcall test::threadRun( LPVOID lpParam )
{ 
     shared_ptr<test> k = *static_cast< shared_ptr<test>* >(lpParam);
     ...
}
Run Code Online (Sandbox Code Playgroud)

我认为这段代码不正确,你的想法是什么?我怎样才能做到这一点 ?

编辑:我通过boost :: weak_ptr解决了我的问题.在这个页面查看我自己的答案

Beh*_*z.M 1

我通过 boost::weak_ptr 解决了我的问题:

test::start()
{
    ....
    shared_ptr<test> shPtr = shared_from_this();
    boost::weak_ptr<test> wPtr=shPtr;
    _beginthreadex( NULL, 0, &test::threadRun, &wPtr, 0, &threadID );

    ...
    ...
}

/*this is a static function*/
UINT __stdcall test::threadRun( LPVOID lpParam )
{ 
shared_ptr<test> k      = static_cast< boost::weak_ptr<test>* >(lpParam)->lock();
     ...
}
Run Code Online (Sandbox Code Playgroud)

  • 这并不能保证解决问题,因为 wPtr 是 test::start() 中的局部变量,并且在 test::start() 结束时将失效,因此问题与之前相同,除非您等待启动的线程在 start() 退出之前“拾取”参数。 (3认同)