Chinaunix首页 | 论坛 | 博客
  • 博客访问: 523564
  • 博文数量: 1344
  • 博客积分: 3000
  • 博客等级: 中校
  • 技术积分: 14890
  • 用 户 组: 普通用户
  • 注册时间: 2010-06-14 20:31
文章分类

全部博文(1344)

文章存档

2010年(1344)

我的朋友

分类:

2010-09-16 15:30:56

  ">本文示例源代码或素材下载   在上一节里我们深入了解了活动对象、活动调度器及异步函数服务器的工作原理及运行机制,想必大家对活动对象的机制及体系结构的运用已经了如指掌。但是大家有没有觉得异步函数使用起来比较麻烦呢?难道非要使用活动对象,非得以"异步"的方式调用异步函数吗?这一节将为大家解决这个问题:异步函数的同步使用。   一、使用cactiveschedulerwait类   在以前的文章"symbian编程总结-界面篇-打开jpeg/gif/png图像"里我们已经看到了cactiveschedulerwait类的使用方法,在此我再详细介绍一下。   很多初学者在开始时会将cactivescheduler和cactiveschedulerwait类弄混,cactivescheduler是活动对象的调度器,而cactiveschedulerwait可以简单的理解为一个当前线程的阻塞器:   调用cactiveschedulerwait::start()方法时,线程阻塞;   调用cactiveschedulerwait::asyncstop()方法时,请求停止对线程的阻塞   因此,我们在不修改原来活动对象代码的情况下,只要简单的在异步函数调用方法后加上"cactiveschedulerwait::start()",在活动对象的runl方法的开头加入"cactiveschedulerwait::ansycstop()"就可以了。   针对上一节教程介绍的控制台应用程序,我们对以下几个方法(下划线为修改部分)进行修改:   cactiveschedulerwait* iwait; void cmyactiveobject::constructl()   {   user::leaveiferror(itimer.createlocal() ); // initialize timer   cactivescheduler::add( this); // add to scheduler      iwait = new (eleave)cactiveschedulerwait;   }    cmyactiveobject::~cmyactiveobject()   {   cancel(); // cancel any request, if outstanding   itimer.close(); // destroy the rtimer object   // delete instance variables if any      if (iwait->isstarted())     {     iwait->asyncstop();     }      delete iwait;   iwait = null;   }    void cmyactiveobject::startl(ttimeintervalmicroseconds32 adelay)   {   cancel(); // cancel any request, just to be sure      itimer.after(istatus, adelay); // set for later   setactive(); // tell scheduler a request is active      iwait->start(); // 第1点   }    void cmyactiveobject::runl()   {   iwait->asyncstop(); // 第2点      tbuf<50> outputstr;   outputstr.appendnum(icount);   iconsole.write(outputstr);   iconsole.write(_l("n"));   icount++;   } 如果喜欢symbian编程总结-基础篇-活动对象正解(4)-异步函数的同步调用请收藏或告诉您的好朋友.
阅读(134) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~