OMGuard 用于使用户操作在入口与出口之间被守护或锁定。这个类在生成的代码(GUARD_OPERATION 宏)中使用, 以确保在被守护的操作中适当锁定和释放互斥对象。
OMGuard 的 copy 构造函数和 assignment 运算符已被显式禁用,以避免错误地将被守护对象互斥对象解锁。
这个类是在头文件 omprotected.h 中定义的。
END_REACTIVE_GUARDED_SECTION 结束对用于反应对象的代码部分的保护。
END_THREAD_GUARDED_SECTION 停止对活动用户对象操作的保护。
GUARD_OPERATION 通过 OMGuard 类对象来守护操作。
START_DTOR_REACTIVE_GUARDED_SECTION 启动对用于销毁反应实例的代码部分的保护。
START_DTOR_THREAD_GUARDED_SECTION 启动对活动用户对象析构函数的保护。
START_REACTIVE_GUARDED_SECTION 启动对用于反应对象的代码部分的保护。
START_THREAD_GUARDED_SECTION 启动对活动用户对象操作的保护。
END_REACTIVE_GUARDED_SECTION
结束对用于反应对象的代码部分的保护。在反应类事件分派中调用这个宏,以防止在事件分派与反应类实例删除之间出现“争用”。将反应类 DTOR 设置为被守护时,将会激活此机制。
END_THREAD_GUARDED_SECTION
停止对活动用户对象操作的保护。在 OMThread 事件分派中使用这个宏,以防止事件分派删除活动对象。将活动类 DTOR 设置为被守护时,将在为活动类生成的代码中激活此机制。
如果 toGuardThread 为 TRUE,那么 execute 方法将调用 START_THREAD_GUARDED_SECTION 宏和 END_THREAD_GUARDED_SECTION 宏。
GUARD_OPERATION
通过 OMGuard 类对象来守护操作。这个宏在生成的代码中使用。
这个宏支持将 OMProtected 聚集到被守护类中,而不是让被守护类继承 OMProtected。
OMDECLARE_GUARDED
将 OMProtected 对象聚集到被守护类中,而不是让这些类继承 OMProtected。其定义如下所示:
#define OMDECLARE_GUARDED
public:
inline void lock() const {m_omGuard.lock();}
inline void unlock() const
{m_omGuard.unlock();}
inline const OMProtected& getGuard()
const {return m_omGuard;}
START_DTOR_REACTIVE_GUARDED_SECTION
启动对用于销毁反应实例的代码部分的保护。将反应(不活动)类设置为被守护时,将在这个类的 DTOR 中调用这个宏。这样做是为了防止在删除反应实例时(在删除与事件分派之间)出现“争用”。
START_DTOR_THREAD_GUARDED_SECTION
启动对活动用户对象析构函数的保护。将活动类设置为被守护时,将在这个类的 DTOR 中调用这个宏。这样做是为了防止在删除活动实例时(在删除与事件分派之间)出现“争用”。
START_REACTIVE_GUARDED_SECTION
启动对用于反应对象的代码部分的保护。在反应类事件分派中调用这个宏,以防止在事件分派与反应类实例删除之间出现“争用”。将反应类 DTOR 设置为被守护时,将会激活此机制。
START_THREAD_GUARDED_SECTION
启动对活动用户对象操作的保护。在 OMThread 事件分派中使用这个宏,以防止事件分派删除活动对象。将活动类 DTOR 设置为被守护时,将在为活动类生成的代码中激活此机制。
如果 toGuardThread 为 TRUE,那么 execute 方法将调用 START_THREAD_GUARDED_SECTION 宏和 END_THREAD_GUARDED_SECTION 宏。