include: co/co.h.
#co::event
co::event
是协程间的一种同步机制,它与线程中的 co::sync_event 类似。
从 v2.0.1 版本开始,co::event
可以在协程与非协程中使用。
#constructor
1. explicit event(bool manual_reset=false, bool signaled=false);
2. event(event&& e);
3. event(const event& e);
- 1, 与线程中的 co::sync_event 类似。
- 2, 移动构造函数。
- 3, 拷贝构造函数,仅将内部引用计数加 1。
#reset
void reset() const;
- 将事件重置为未同步状态。
#signal
void signal() const;
- 产生同步信号,将事件设置成同步状态。
- 所有 waiting 状态的协程或线程会被唤醒。若当前并没有 waiting 状态的协程或线程,则下一个调用 wait() 方法的协程或线程会立即返回。
#wait
1. void wait() const;
2. bool wait(uint32 ms) const;
- 1, 等待直到事件变成同步状态。
- 2, 等待直到事件变成同步状态或超时。参数
ms
指定超时时间,单位为毫秒。若事件变成同步状态,返回 true,否则返回 false。 - 当构造函数中
manual_reset
为 false 时,wait() 结束时会自动将事件设置成未同步状态。
#代码示例
#include "co/co.h"
int main(int argc, char** argv) {
flag::parse(argc, argv);
co::event ev;
// capture by value,
// as data on stack may be overwritten by other coroutines.
go([ev](){
ev.signal();
});
ev.wait(100); // wait for 100 ms
return 0;
}