gpt4 book ai didi

c++ - shared_from_this() 来自另一个线程(成员线程函数)

转载 作者:搜寻专家 更新时间:2023-10-31 00:21:19 29 4
gpt4 key购买 nike

在我的代码中,我使用 boost::threads我有一个通过名为 fnThread() 的成员函数运行线程的类.在此 fnThread() 中,我想创建一个 shared_from_this() 并将其传递给带有信号的监听方。但是行 boost::shared_ptr<foo> p = shared_from_this()抛出异常如下;

boost::exception_detail::clone_impl<boost::exception_detail::error_info_injector<boost::bad_weak_ptr> > at memory location 0x04c2f720.

违规命令是 shared_from_this() 。创建 shared_from_this() 是否违法来自另一个线程还是我做错了什么?任何帮助表示赞赏。谢谢!

PS:我计划将我的信号参数更改为普通指针,因为它不会影响我的结构。但我赞成 shared_ptr<> 并且我想听听有关该决定的任何评论。对于这种特殊情况,这可能是一个糟糕的选择。你有什么建议?

编辑:

这里有一个简单的类供你测试

class foo : public boost::enable_shared_from_this<foo>
{
public:
int start()
{
foo_thread.reset(new boost::thread(boost::bind(&foo::fn_foo_thread, this)));

return 0;
}

~foo()
{
if (foo_thread->joinable())
foo_thread->join();
}

private:
boost::scoped_ptr<boost::thread> foo_thread;

void fn_foo_thread()
{
boost::shared_ptr<foo> p = shared_from_this();
std::cout << "foo thread terminated. \n" << std::endl;
}
};

最佳答案

shared_from_this 可以从另一个线程使用。当 this 不存在 shared_ptr(顾名思义)时,将抛出 bad_weak_ptr 异常。您的问题很可能存在于代码的其他地方。

关于c++ - shared_from_this() 来自另一个线程(成员线程函数),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4763294/

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