活动对象框架之一:异步函数

来源:互联网 发布:淘宝男装冬装西服 编辑:程序博客网 时间:2024/05/17 00:57

  参数包含TRequestStatus&,必然是异步函数,比如RTimer::After()

    void After(TRequestStatus& aStatus, TTimeIntervalMicroSeconds32 aInterval);

   

    TRequestStatus包含一个TInt状态值,代表异步函数的状态,

    -处理状态

    -完成状态

 

    许多Symbian自带的系统函数都有同步函数和异步函数两个版本

    *比较下面两个函数

          TInt MyFunc1(TAny* someArg);

          TInt MyFunc2(TAny* someArg, TRequestStatus& aStatus);

    *MyFunc1()被调用时,该函数完成之后送立刻返回运行结果

     当调用MyFunc2(),该函数立刻返回,并且将aStatus设为KRequestPending,表示该函数正在执行,当程序运行完成之后,aStatus发生变化,用来指示运行的结果(如果运行成功则为KErrNone).

   

    调用异步函数示例
 *
可以同步等待,直到请求完成,比如
     RTimer timer; //
通过RTimer获得一个时间服务器的句柄
     timer.CreateLocal(); //
获得本地时间
     TRequestStatus status; //
生成一个请求状态变量status
     timer.After(status,1000000);
     User::WatiForRequest(status);
*
但是,这样会造成线程挂起1秒钟
*
更好的解决方案是使用活动对象,当计时器完成之后通知活动对象

 

原创粉丝点击