WEB开发网
开发学院手机开发Symbian 开发 彻底理解 Symbian 活动对象 阅读

彻底理解 Symbian 活动对象

 2010-08-24 05:50:00 来源:WEB开发网   
核心提示:LOCAL_C voidCleanupClosePushL(timer);User::LeaveIfError(timer.CreateLocal());TRequestStatus status(KRequestPending);timer.After(status, 1000000);// 等待status对应的信

LOCAL_C void

CleanupClosePushL(timer);

User::LeaveIfError(timer.CreateLocal());

TRequestStatus status(KRequestPending);

timer.After(status, 1000000);

// 等待status对应的信号量,此处用了User::WaitForRequest方法将异步方法的调用模拟成同步

User::WaitForRequest(status);

CleanupStack::Pop(&timer);

LOCAL_C void

TBuf<10> str;

console->Write(str);

console->Write(KNewLine);

三、使用User::WaitForRequest方法的问题

User::WaitForRequest有时候不会正常运行,如:CImageDecoder::Convert方法:

IMPORT_C virtual voidTRequestStatus* aRequestStatus, CFbsBitmap& aDestination, CFbsBitmap& aDestinationMask, TInt aFrameNumber = 0);

最后一个参数必须为EOptionAlwaysThread,User::WaitForRequest才能正常执行,个人认为 CImageDecoder::Convert如果没有加EOptionAlwaysThread参数的时候是使用"长线任务"(将在下一节介绍)实现的。所以,CImageDecoder::Convert方法应该按照如下方法调用:

TRequestStatus status(KRequestPending);

CImageDecoder* decoder = CImageDecoder::FileNewL(iFs, aFileName, KMIMEType,

decoder->Convert(&status, aBitmap);

User::WaitForRequest(status);

delete decoder;

四、小结

本文介绍了在如果将异步函数同步使用。其实在Symbian的早期编程中还有一种异步函数的同步方法,那就是在异步函数调用后使用 CActiveScheduler::Start()方法嵌套活动调度器。但是这种方法已经被Symbian 7.0后的CActiveSchedulerWait替代,在此处就不再介绍。

另:在介绍活动对象的专题里涉及到很多Symbian OS的客户/服务器架构的知识,我会在近期另外开一个专题讲解,请大家耐心等待。

发表于 @ 2009年03月20日 16:30:00||举报|收藏

上一页  4 5 6 7 8 9 

Tags:彻底 理解 Symbian

编辑录入:coldstar [复制链接] [打 印]
赞助商链接