是否有可能重新启动boost :: future?

时间:2016-06-12 15:58:10

标签: c++ future boost-thread

我正在使用boost :: future .then()功能。我写了一个小型反应器,它以异步方式读取文件。有一个函数readFileAsync(int fd),它返回文件中数据的未来。当描述符准备好并履行承诺时,该反应器将读取固定数量的字节。但是,如果文件中有更多数据,我会决定如何重新启动未来。这样做的模式是什么?

readFileAsync(fd).then([&](auto future) {
  auto data = future.get();
  if (data.block.empty()) { // end of file
     close(data.fd);  
  } else {
   readFileAsync(data.fd).then(...); // XXX: how to work that out?
  }
});

1 个答案:

答案 0 :(得分:1)

而不是匿名lambda,创建正常的循环函数:

struct continue_reading
{
    template <typename T>
    void operator()(T future)
    {
        auto data = future.get();
        if (data.block.empty()) { // end of file
           close(data.fd);  
        } else {
           readFileAsync(data.fd).then(continue_reading);
    }
};

//...

readFileAsync(fd).then(continue_reading)