在 c# 中我喜欢非常方便AutoResetEvent
ManualResetEvent
和WaitHandle.WaitAll
. 我应该在 c++ 中使用什么(可以使用 boost)来获得相同的功能?我需要可移植的代码,以便可以在 Windows 和 Linux 上运行它。
问问题
701 次
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 回答