代码之家  ›  专栏  ›  技术社区  ›  Tim

使用带有返回值的boost::bind和boost::thread

  •  1
  • Tim  · 技术社区  · 12 年前

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

    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 回复  |  直到 12 年前
        1
  •  1
  •   sehe    12 年前

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

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