ACE期货类ACE_Future返回异步调用结果原理解析

来源:互联网 发布:内外网转换软件 编辑:程序博客网 时间:2024/05/16 17:37
ACE_Future<u_long> result = asynch_fun();

在阅读主动对象模式示例代码时,看到ACE_Future类。异步调用直接返回ACE_Future对象。当异步调用完成时,返回的ACE_Future对象,将设置返回值。此时使用ACE_Future的方法ACE_Future<T>::ready (void)将返回1。本文将探讨ACE_Future期货类是如何在异步调用完成后设置返回的ACE_Future类对象的值的。

ACE_Future是模板类:

template <class T>class ACE_Future;

其中class T为返回值类型。

类ACE_Future中保存一个ACE_Future_Rep<T>类的指针,ACE_Future_Rep<T>类为实际保存返回值的类。类ACE_Future被构造时,在堆上分配一个ACE_Future_Rep<T>类实例。异步函数在栈中分配ACE_Future类实例,但其保存堆上的一个ACE_Future_Rep<T>指针。ACE_Future类实例按值返回,此值赋给调用异步函数的函数中声明的变量。ACE_Future类重载了operator=,使得在赋值时,右值的ACE_Future_Rep<T>类实例引用计数加1,并将此指针赋给左值的相应指针,左值中原有的指针引用计数减1(如果引用计数减为0,则释放老指针指向的堆空间)。另外在异步方法中,将要传递的ACE_Future类实例的引用传递给了方法对象,方法对象完成任务后可已修改ACE_Future中的ACE_Future_Rep<T>值,此时即可将异步调用结果传递给发起异步调用的函数。