gpt4 book ai didi

c++ - 如何将 boost::shared_ptr 作为指向 Windows 线程函数的指针传递?

转载 作者:可可西里 更新时间:2023-11-01 13:33:03 25 4
gpt4 key购买 nike

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

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);
...
}

我认为这段代码不正确,你的想法是什么?我该怎么做?

编辑:我通过 boost::weak_ptr 解决了我的问题。检查我自己的答案 page

最佳答案

当你必须将参数从一个类传递到一个静态函数/方法并且你拥有的是一个回调参数(通常在线程回调中)时,我通常将 this 传递给回调。这样一来,您只需一个简单的类型转换,就可以访问类(class)的所有成员。实际上,回调是作为您类(class)的成员:

test::start()
{
// [...]
_beginthreadex(NULL, 0, &test::threadRun, this, 0, &threadID);
// [...]
}

// this is a static function
UINT __stdcall test::threadRun(LPVOID lpParam)
{
test* self = static_cast<test*>(lpParam);

// do whatever you want with all the instance members :)

self->getMyShared();
self->useMyGreatMemberMethof();

// ...
}

我的2c

关于c++ - 如何将 boost::shared_ptr 作为指向 Windows 线程函数的指针传递?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5102038/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com