CDirectScreenAccess 的一些解释

 收藏
by  张越

CDirectScreenAccess , RDirectScreenAccess 和 MDirectScreenAccess的关系

CDirectScreenAccess是一个AO,它包含一个RDirectScreenAccess类型的成员,而RDirectScreenAccess继承自MWsClientClass,
具有Server的句柄,而且它包含RWsSession成员,这个成员继承自RSessionBase,所以显然,这是一个Window Server的Client。

这样一个模式,就是我们平时使用的典型的通过AO去访问一个Client Side DLL的方式。这样,通过CDirectScreenAccess这个AO以及
RdirectScreenAccess实现了C/S的异步调用.

Server通知Client有Abort需要处理,此时Client线程中,RunL将被调用,应该是这样的:在Client端,CDirectScreenAccess通过RDirectScreenAccess访问Server,
然后SetActive(),RDirectScreenAccess在得到Server应答之后,调用CDirectScreenAccess的RunL(),通知CDirectScreenAccess
处理,根据情况判断在RunL中调用了AbortNow()方法。实际上,在作上一个项目的时候,我也有和此模式完全一样的做法。

至于为什么我认为MDirectScreenAccess的方法AbortNow()是在RunL中被调用的。一是因为文档中这样提到了,另外,我认为作为一个典型的Observer模式,这样设计是合理的,我也这样做过。其他的方式可能只会更复杂。

by   r60600

用Windows Sever在屏幕上绘图需要进行上下文切换,这会减慢了绘图速度。越过Windows Sever就
避免了上下文切换,这样就可以直接访问屏幕,即:直接绘图。

Symbian OS有三种直接绘图:
1.创建并使用CfbsScreenDevice
2.直接访问显存
3.使用CdirectScreenAccess

CFbsScreenDevice 是一个图形设备,使用前需要为它创建一个CFbsBitGc图形描述表,它具有指向屏幕驱动器SCDV.DLL的地址。使用它绘图在屏幕上直接完成而不需要Windows Sever。Windows Sever不知道直接绘图绘图动作,别的窗口出现时直接绘图无法停止,从而有可能使屏幕杂乱。

获得显存地址,直接通过指针访问显存对屏幕进操作比CfbsScreenDevice方法快,但其性能会受设备驱动器
的影响。在某些设备中,屏幕会根据显存的变化自动更新,而另一些设备的绘图必须要去激活才行。
显存地址只对目标硬件有效,在模拟器中我们使用临时位图及其数据地址。

CdirectScreenAccess是一种较为安全(会得到Windows Sever的通知)的直接访问屏幕的的方法,速度也较快。所以很多时候都推荐用CdirectScreenAccess。

猜你喜欢

转载自blog.csdn.net/dymx101/article/details/6553966