

| стрелялки |
| спорт |
| драки |
| стратегии |
| гонки |
| логические |
| азартные |
| аркады |
| эротические |
| фильмы онлайн |
| события OnTim-er |
|
Для отмены представления файла в адресном пространстве процесса предназначен метод: Единственный параметр функции - базовый адрес объекта отображения (результат работы метода MapViewOfFile()). Вернемся к нашему примеру и опишем событие закрытия главной формы: procedure TForm1.FormClose(Sender: TObject; var Action: TCloseAction); begin UnMapViewOfFile(pMFile); //отмена представления файла в адресном пространстве CloseHandle(hMFile); //освобождаем дескриптор объекта отображения end; Научившись создавать и уничтожать объекты отображения, займемся самым интересным. Разместите на главной форме проекта два элемента управления: группу переключателей TRadioGroup и таймер TTimer. Чтобы заполнить группу переключателей некоторым набором элементов, перепишите событие создания формы: procedure TForm1.FormCreate(Sender: TObject); var Ch : byte; begin RadioGroup1.Align:=alClient; for Ch:=Byte('A') to Byte('Z') do RadioGroup1.Items.Add(Char(Ch)); RadioGroup1.Columns:=3; end; Компонент RadioGroup1 заполняется тремя колонками символов латинского алфавита. Опишем щелчок по компоненту: procedure TForm1.RadioGroup1Click(Sender: TObject); var ind : string; function UnMapViewOfFile(BaseAddress : pointer) : Boolean; begin ind:=IntToStr(RadioGroup1.Itemlndex); //индекс выбранной кнопки StrCopy(pMFile,PChar(ind)); //передаем индекс в файл end; В момент щелчка по группе переключателей выясняется индекс отмеченного переключателя, и он передается в объект отображения. Для этого применяется метод StrCopy(). Для считывания данных из объекта отображения предназначен таймер: procedure TForm1.Timer1Timer(Sender: TObject); var ind : string; begin if NOT (Application.Active) then begin ind:=PChar(pMFile); RadioGroup1.ItemIndex:=StrToIntDef(ind,0); end; end; В момент возникновения события OnTim-er() производится считывание данных из объекта отображения. Полученное значение соответствует индексу переключателя, выбранного в другом приложении. Проект завершен. Запустите несколько экземпляров нашего приложения и проверьте работоспособность кода. При одновременном обращении нескольких процессов к объекту отображения возможно возникновение ошибки совместного использования ресурса. В таких случаях для защиты разделяемого ресурса целесообразно воспользоваться объектами синхронизации, например критической секцией. В этой главе мы познакомились с основными механизмами взаимодействия приложений, работающих на одном компьютере. Были изучены особенности работы с буфером обмена, механизмом обмена сообщениями, динамическим обменом данными и отображаемыми в память файлами. Материал следующей главы развивает тему взаимодействия процессов, он посвящен совместной работе процессов в сети. |
