主动模式

来源:互联网 发布:图像数据库 编辑:程序博客网 时间:2024/04/30 21:55

 

主动对象模式是什么?

   

--> ACE_Activation_Queue  

     里面放入的是ACE_Method_Object,

主动对象会去监视ACE_Activation_Queue是否包含记录,如果有就调用方法对象的call方法。每个方法对象中会包含一个它要回调的主动对象指针。

 

使用主动对象的好处是使得程序是发生在调用端而不是主调端执行,这样主线程就无须等待,这对于如I/0设备的读写缓慢的使用主动对象就比较合适。

 

主动对象常常要使用commandproxy模式。

--command模式就是一个方法对应一个对象;通常会有一个抽象类以方便给每一个对象提供一个统一的接口。

--proxy:经由command提供的接口来保证查询到真正的对象。

 

实现步骤:

ACE_Task 用于主动对象,ACE_Task是一个模版类,模版参数用来指定线程是否同步或不同步.ACE_Task有点类似于windows消息.

 

  ACE_Message_Block*   MSG结构

  ACE_Task::putq      SendMessage();

  ACE_Task::getq       GetMessage();

 

首先每一个任务[线程]需要继承ACE_Task;然后实现open, close, svc方法;

通常调用open来激活线程:调用activate方法。

调用close以终止执行。

调用svc来实现线程的运转好比线程执行函数。--如果ACE_Activation_Queue队列中存有记录,就从队列取出方法对象,并调用方法对象的call()方法,通过call方法来回调主动对象。

 

为每一个方法继承ACE_Method_Object;并实现call方法:

如果需要方法对象调用返回的结果就需要使用ace_future将结果保存,这样每一个方法对象都有一个期货对象;客户用ready方法来检查是否将结果放置与ace_future期货对象中。

 

主动对象模式在c830项目的planAgent中被使用到。

原创粉丝点击