Symbian 编程之活动对象正解
2010-03-18 20:58:00 来源:WEB开发网User::WaitForRequest(status);
CleanupStack::Pop(&timer);
}
LOCAL_C void MainL()
{
TInt n = 0;
TBuf<10> str;
_LIT(KNewLine, " ");
FOREVER
{
DoTestL();
str.Num(n);
n++;
console->Write(str);
console->Write(KNewLine);
}
}
三、使用User::WaitForRequest方法的问题
User::WaitForRequest有时候不会正常运行,如:CImageDecoder::Convert方法:
IMPORT_C virtual void Convert(TRequestStatus* 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,, CImageDecoder::EOptionAlwaysThread);
decoder->Convert(&status, aBitmap);
User::WaitForRequest(status);
delete decoder;
decoder = NULL;
四、小结
本文介绍了在如果将异步函数同步使用。其实在Symbian的早期编程中还有一种异步函数的同步方法,那就是在异步函数调用后使用 CActiveScheduler::Start()方法嵌套活动调度器。但是这种方法已经被Symbian 7.0后的CActiveSchedulerWait替代,在此处就不再介绍。
更多精彩
赞助商链接