ACE中的主动对象模式(Active Object Pattern)

被动对象就是一般情况下在那儿放着不会动,等待着别的执行线程调用,然后才会执行。主动对象一般自己包含执行线程,可以主动的执行代码。

 

1.主动对象是基于ACE_Task类的,它提供执行线程的。

 

2.当某些要执行的代码想被执行时,要放入某个队列,然后执行线程发现队列不空时就从这个队列里面取出这个队列中的对象,然后执行。这个队列就是ACE_Activation_Queue

 

3.放在ACE_Activation_Queue中的对象被称为方法对象,这些对象都是继承于ACE_Method_ObjectACE_Method_Object提供了一个名字为call的虚函数(它只有三个函数,另外两个是一个构造和一个析构),实现自己的方法对象的call函数,然后可以在主动对象的svc函数(继承自ACE_Task)中调用。

4.若要得到异步操作的结果,还需要ACE_Future对象,当异步执行完毕后,执行线程会设置该对象,如果还没有设置之前就想取得它里面的结果,则会阻塞,直到被设置为止。

所以,它的流程就是这样的:

(1) 创建一个Active Object对象,然后调用它的open函数(open中调用activate,接着svc会被调用)。

(2) 在主动对象的里面循环调用ACE_Activation_Queuedequeue()函数,如果ACE_Activation_Queue中没有方法对象,则会阻塞。

(3) 某个时候如果在ACE_Activation_Queue中存在方法对象,则该函数就会被顺利执行通过,并且它返回方法对象的指针,然后就可以调用这个方法对象的call函数。

这样,这个方法对象就会被顺利执行了。

 

在使用主动对象的时候,它也就是将某个方法对象初始化之后,放入ACE_Activation_Queue中,然后其它的事情就由上面的步骤来完成了。

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值