![](/img/trans.png)
[英]boost::bind, boost::asio, boost::thread, and classes
[英]use boost::bind and boost::thread with return values
我想创建一个在另一个线程中运行的函数版本:
errType sendMessage(Message msg,Message* reply);
像这样:
errType async_sendMessage(Message msg,Message* reply){
boost::thread thr = boost::thread(boost::bind(&sendMessage, this));
return (return value of function);
}
我想做的是将参数传递给函数并存储返回值。 我怎样才能做到这一点?
如果您要像这样使用它,将不会有太多收获。 但是,典型用法是
std::future<errType> async_sendMessage(Message msg,Message* reply){
auto fut = std::async(&MyClass::sendMessage, this);
return fut;
}
然后,例如
Message msg;
auto fut = object.async_sendMessage(msg, nullptr);
// do other work here
errType result = fut.get();
这是完整的演示(为缺少的元素填充存根):** 在Coliru上直播
#include <future>
struct Message {};
struct errType {};
struct MyClass
{
std::future<errType> async_sendMessage(Message msg,Message* reply){
auto fut = std::async(std::bind(&MyClass::sendMessage, this));
return fut;
}
private:
errType sendMessage() {
return {};
}
};
int main()
{
MyClass object;
Message msg;
auto fut = object.async_sendMessage(msg, nullptr);
errType result = fut.get();
}
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.