Выделите размер сопоставленных файлов памяти динамически в Windows Mobile - PullRequest
1 голос
/ 12 сентября 2011

Я пытаюсь найти способ динамически распределять память для файлов, отображаемых в памяти, которые совместно используются различными процессами. Мой дизайн выглядит следующим образом: В Windows Mobile я пишу поток вывода, который обрабатывает часть отображения из разных процессов, используя общую память. План состоит в том, чтобы создать файл отображения памяти, равный размеру экрана. Например: если размер экрана равен 640 X 480, я создаю массив BYTE 640 X 480 X 4, а затем делюсь этим с другим процессом, так что другой процесс обновляет дисплей hDC в памяти, а затем отправляет обновление в поток отображения, чтобы обновить отображение на устройстве. Это работает нормально, но есть одно ограничение - выделять память во время компиляции, поскольку мы не можем выделить память динамически

(http://msdn.microsoft.com/en-us/library/aa366542%28v=vs.85%29.aspx). Если вы не хотите, чтобы размер файла изменялся (например, при отображении файлов только для чтения), вызовите CreateFileMapping и задайте ноль как для dwMaximumSizeHigh, так и для dwMaximumSizeLow. При этом создается файл объект сопоставления точно такого же размера, что и файл, в противном случае необходимо рассчитать или оценить размер готового файла, поскольку объекты сопоставления файлов имеют статический размер, а после создания их размер нельзя увеличивать или уменьшать.

  1. Есть ли способ выделить размер отображаемого в память файла после получения координат экрана устройства? Одна вещь состоит в том, чтобы удовлетворить это для устройств с разными размерами экрана, таких как планшеты, мобильные устройства и т. Д., А другая вещь: если приложение хочет отображать только часть экрана, мы должны иметь возможность создавать карту памяти только с таким размером.
  2. Есть ли другая альтернатива файлам, отображенным в память? Причина, по которой я выбрал файлы, сопоставленные с памятью, заключается в том, что когда другой процесс изменяет отображение, ему не нужно отправлять все подробности обновления и он может просто установить мьютекс, чтобы позволить потоку отображения знать, что ему нужно обновить экран. Таким образом, я мог получить частоту обновления 50 кадров в секунду при отображении из 5 разных приложений.

Заранее спасибо

1 Ответ

5 голосов
/ 12 сентября 2011

Не используйте файл, нет смысла записывать эти данные на диск. Передайте INVALID_HANDLE_VALUE в CreateFileMapping, чтобы память поддерживалась файлом подкачки, и вы можете установить любой необходимый размер.

...