64,685
社区成员
发帖
与我相关
我的任务
分享
class A
{
public:
void func_a(const std::string& str)
{
//...
m_str += str; //工作线程t不能访问 m_str
//...
}
private:
std::string m_str;
};
class B
{
public:
typedef boost::signals2::signal<void(const std::string&)> signal_t;
public:
void func_b()
{
std::string s;
m_signal(s);
}
signal_t& get_signal()
{
return m_signal;
}
private:
std::string m_str;
signal_t m_signal;
};
int main()
{
boost::shared_ptr<A> p_a = /*...*/;
boost::shared_ptr<B> p_b = /*...*/;
p_b->get_signal().connect(boost::bind(&A::func_a, p_a, _1));
boost::thread t(boost::bind(&B::func_b, p_b));
//此时工作线程t运行A::func_a()
//但是这个时候无法访问A::m_str,因为我们只是绑定了func_a()的地址
}
class A
{
public:
void func_a(const std::string& str, B::CallbackType callback)
{
//...
m_str += str;
callback(m_str); // 这里class B就能访问到m_str
//...
}
private:
std::string m_str;
};
class B
{
public:
typedef boost::function<void,string*> CallbackType;
typedef boost::signals2::signal<void(const std::string&, CallbackType)> signal_t;
public:
void B::B()
{
// 自己绑定要处理的方法
m_callback = bind(...);
}
void func_b()
{
std::string s;
m_signal(s, m_callback);
}
signal_t& get_signal()
{
return m_signal;
}
private:
std::string m_str;
signal_t m_signal;
CallbackType m_callback;
};
另外bind和shared_ptr都已经纳入了最新的C++11/14标准,建议更新一下编译器,直接用std::bind和std::shared_ptr