使用boost :: bind和boost :: thread返回值

时间:2013-09-30 06:56:52

标签: c++ boost-thread boost-bind

我想创建一个在另一个线程中运行的函数版本:

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

我想要做的是将参数传递给函数并存储返回值。 我怎么能这样做?

1 个答案:

答案 0 :(得分:1)

如果你打算像那样使用它,那就不会有太大的收获。但是,典型的用法是

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();

这是一个完整的演示(填充缺失元素的存根):** Live on 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();
}