在Windows Mobile中动态分配内存映射文件的大小

Har*_*ish 1 c++ memory windows windows-mobile shared-memory

我正在尝试找到一种为不同进程之间共享的内存映射文件动态分配内存的方法。我的设计如下:在Windows Mobile中,我正在编写一个显示线程,该线程使用共享内存处理来自不同进程的显示部分。计划是创建一个与屏幕大小相等的内存映射文件,例如:如果屏幕大小为640 X 480,那么我创建一个640 X 480 X 4的BYTE数组,然后与另一个进程共享该数组其他过程将更新内存中的hDC显示,然后将更新发送到显示线程以更新设备上的显示。这可以正常工作,但一个约束是在编译时分配内存,因为我们无法动态分配内存

(http://msdn.microsoft.com/zh-cn/library/aa366542%28v=vs.85%29.aspx)。当您不想更改文件的大小时(例如,映射只读文件时),请调用CreateFileMapping并为dwMaximumSizeHigh和dwMaximumSizeLow都指定零。这样做会创建一个与文件大小完全相同的文件映射对象。否则,您必须计算或估计完成文件的大小,因为文件映射对象的大小是静态的。一旦创建,它们的大小就不能增加或减小。

  1. 获取设备屏幕坐标后,是否可以分配内存映射文件的大小?一件事是为平板电脑,移动设备等不同屏幕大小的设备提供服务,另一件事是,如果应用程序只希望显示屏幕的一部分,那么我们应该能够仅以该大小创建内存映射。
  2. 除了内存映射文件,还有其他选择吗?之所以选择“内存映射文件”,是因为当其他进程修改显示时,它不需要发送所有更新详细信息,而只需设置一个互斥锁即可让Display线程知道它需要刷新屏幕。这样,通过5个不同应​​用程序的显示,我可以获得每秒50帧的刷新率。

提前致谢

Han*_*ant 5

不要使用文件,将这些数据写入磁盘没有任何价值。将INVALID_HANDLE_VALUE传递给CreateFileMapping,以便内存由分页文件支持,并且您可以设置所需的任何大小。