什么是c#AutoResetEvent / ManualResetEvent的c ++可移植模拟?

时间:2012-11-26 06:53:41

标签: c++ boost

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

1 个答案:

答案 0 :(得分:0)

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

承诺用于设置事件值,未来等待值。

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

接下来是这个想法:

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

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

等待几个期货只是在迭代你想要等待的事件的容器。