您的位置:首页 > 其它

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

2009-07-14 10:43 183 查看
参数包含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秒钟
*更好的解决方案是使用活动对象,当计时器完成之后通知活动对象
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: