Карта сайта Kansoftware
НОВОСТИУСЛУГИРЕШЕНИЯКОНТАКТЫ
KANSoftWare

Еще раз об отображаемом в память файле

Delphi , Файловая система , Файлы

Еще раз об отображаемом в память файле

unit MapWForm;

interface

uses
  Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms, Dialogs,
  StdCtrls, SyncObjs, TeEngine, Series, ExtCtrls, TeeProcs, Chart, Grids,
  ComCtrls;

type
  TForm1 = class(TForm)
    Timer1: TTimer;
    TrackBar1: TTrackBar;
    Label1: TLabel;
    procedure FormCreate(Sender: TObject);
    procedure FormDestroy(Sender: TObject);
    procedure Timer1Timer(Sender: TObject);
    procedure TrackBar1Change(Sender: TObject);
  private
    hMapFile: THandle;
    MapFilePointer: Pointer;
  end;

var
  Form1: TForm1;

implementation

{$R *.DFM}

procedure TForm1.FormCreate(Sender: TObject);
begin
  hMapFile := CreateFileMapping(
    $FFFFFFFF, // file handle ... or memory
    nil, // security
    Page_ReadWrite, // access rights
    0, // high memory size
    10000, // low memory size
    'DdhMappedFileGraph'); // mapped file name
  if hMapFile <> 0 then
    MapFilePointer := MapViewOfFile(
      hMapFile, // handle returned above
      File_Map_All_Access, // access rights
      0, 0, 0) // access the entire mapped file
  else
    ShowMessage('hMapFile = 0');
  if MapFilePointer = nil then
    ShowMessage('MapFilePointer = nil');
  // not a listener of messages...
  TrackBar1.Position := 1 + Random(10);
  Label1.Caption := IntToStr(TrackBar1.Position)
end;

procedure TForm1.FormDestroy(Sender: TObject);
begin
  UnMapViewOfFile(MapFilePointer);
  CloseHandle(hMapFile);
end;

procedure TForm1.Timer1Timer(Sender: TObject);
var
  X, Y: Integer;
  Address: Pointer;
begin
  X := TrackBar1.Position - 1;
  Y := Random(10);
  Address := pChar(MapFilePointer) + (X + Y * 10) * 4;
  PInteger(Address)^ := PInteger(Address)^ + Random(10);
  Address := pChar(MapFilePointer) + 400;
  while PInteger(Address)^ <> 0 do
  begin
    PostMessage(PInteger(Address)^, wm_user, 0, 0);
    Address := pChar(Address) + 4;
  end;
end;

procedure TForm1.TrackBar1Change(Sender: TObject);
begin
  Label1.Caption := IntToStr(TrackBar1.Position)
end;

initialization
  Randomize;
end.

Программа на Delphi создает графическое пользовательское интерфейсе (GUI) с формой, таймером и трекбаром. Программа картографирует файл в память с помощью функции CreateFileMapping и отображает содержимое картографированного файла в контроле метки.

В процедуре FormCreate программа создает файловую карту с помощью функции CreateFileMapping с параметрами:

  • $FFFFFFFF: Обратный handle к файлу (используется для создания нового файла).
  • nil: Безопасность описателя для файла.
  • Page_ReadOnly: Защита страницы для картографированного файла (не используется в этом случае, но по умолчанию установлен в Page_ReadOnly).
  • 0: Высокая память для картографированного файла.
  • 10000: Низкая память для картографированного файла.
  • 'DdhMappedFileGraph': Имя картографированного файла.

Если создание файловой карты успешно, программа картографирует файл в память с помощью функции MapViewOfFile и хранит полученный указатель в переменной MapFilePointer.

В процедуре FormDestroy программа отображает файл из памяти с помощью функции UnMapViewOfFile и закрывает handle файла с помощью функции CloseHandle.

Процедура Timer1Timer вызывается каждые 1000 миллисекунд (или при наступлении таймера). Она выполняет следующие действия:

  • Получает текущую позицию трекбара (TrackBar1.Position) и вычитывает из нее 1.
  • Генерирует случайное число между 0 и 10 для координаты Y.
  • Вычисляет адрес картографированного файла на основе координат X и Y.
  • Читает целочисленное значение из картографированного файла по адресу, вычисленному ранее, с помощью функции PInteger.
  • Увеличивает значение случайным образом между 0 и 10.
  • Отправляет пользовательский сообщение в окно с новым значением.

Процедура TrackBar1Change обновляет контрол метки (Label1) с текущей позицией трекбара (TrackBar1.Position).

Некоторые предложения по улучшению:

  • Вместо использования Randomize в разделе инициализации, рассмотрите использование его только в процедуре FormCreate, чтобы обеспечить-consistent generation случайных чисел.
  • Рассмотрите добавление обработки ошибок в процедурах файловой картографии и отображения для обработки потенциальных ошибок.
  • Программа использует жестко закодированное имя для картографированного файла ('DdhMappedFileGraph'). Рассмотрите использование более описательного или уникального имени, особенно если это программ будет использоваться в многопользовательском окружении.

В целом, код appears to be функциональный, но может потребовать дополнительной обработки ошибок и рассмотрения вопросов производительности и безопасности.

В статье рассматривается пример использования файловой памяти в Delphi, где создается файловая память, маппится в адресное пространство процесса и изменяется содержимое файла с помощью тракбара.


Комментарии и вопросы

Получайте свежие новости и обновления по Object Pascal, Delphi и Lazarus прямо в свой смартфон. Подпишитесь на наш Telegram-канал delphi_kansoftware и будьте в курсе последних тенденций в разработке под Linux, Windows, Android и iOS




Материалы статей собраны из открытых источников, владелец сайта не претендует на авторство. Там где авторство установить не удалось, материал подаётся без имени автора. В случае если Вы считаете, что Ваши права нарушены, пожалуйста, свяжитесь с владельцем сайта.


:: Главная :: Файлы ::


реклама


©KANSoftWare (разработка программного обеспечения, создание программ, создание интерактивных сайтов), 2007
Top.Mail.Ru

Время компиляции файла: 2024-08-19 13:29:56
2024-11-21 12:05:03/0.0059599876403809/1