4

在 c# 中我喜欢非常方便AutoResetEvent ManualResetEventWaitHandle.WaitAll. 我应该在 c++ 中使用什么(可以使用 boost)来获得相同的功能?我需要可移植的代码,以便可以在 Windows 和 Linux 上运行它。

4

1 回答 1

1

我还没有完全阅读链接。我想你可以使用期货/承诺来实现它们。

Promise 用于设置事件值,未来等待该值。

为了获得自动/手动重置,您需要使用智能指针进行额外的间接操作,以便重新分配承诺/未来。

接下来是思路:

template <typename T>
class AutoResetEvent 
{
  struct Impl {
    promise<T> p;
    future<T> f;
    Impl(): p(), f(p) {}
  };
  scoped_ptr<Impl> ptr;
public:
  AutoResetEvent() : ptr(new Impl()) {}
  set_value(T const v) {
    ptr->p.set_value(v);
  }
  T get() {
     T res = ptr->f.get();
     ptr.reset(new Impl());
  }
  void wait() {
     ptr->f.wait();
     ptr.reset(new Impl());
  }
};

你需要多一点才能使它们可移动。

等待几个未来只是在一个包含你想要等待的事件的容器上进行迭代。

于 2012-12-11T17:16:57.443 回答