#pragma once #include "fiber_cpp_define.hpp" #if !defined(_WIN32) && !defined(_WIN64) struct ACL_FIBER_COND; namespace acl { class fiber_event; /** * 可用在协程之间,线程之间,协程与线程之间的条件变量 */ class FIBER_CPP_API fiber_cond { public: fiber_cond(void); ~fiber_cond(void); /** * 等待条件变量事件被触发 * @param event {fiber_event&} * @param timeout {int} 超时等待时间(毫秒) * @return {bool} 成功时返回 true,否则返回 false 表示超时 */ bool wait(fiber_event& event, int timeout = -1); /** * 唤醒在条件变量上的等待者,如果没有等待者则直接返回,运行行为和 * 线程条件变量类似 * @return {bool} 成功返回 true,否则返回 false 表示失败 */ bool notify(void); public: /** * 返回 C 版本的条件变量对象 * @return {ACL_FIBER_COND*} */ ACL_FIBER_COND* get_cond(void) const { return cond_; } private: ACL_FIBER_COND* cond_; }; } #endif