在c#中,我非常方便AutoResetEvent
ManualResetEvent
和WaitHandle.WaitAll
。
我应该在c ++中使用什么(可以使用boost)来具有相同的功能?我需要代码可移植,所以我可以在Windows和Linux上运行它。
答案 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());
}
};
你需要更多一点才能使它们移动。
等待几个期货只是在迭代你想要等待的事件的容器。