русс | укр

Языки программирования

ПаскальСиАссемблерJavaMatlabPhpHtmlJavaScriptCSSC#DelphiТурбо Пролог

Компьютерные сетиСистемное программное обеспечениеИнформационные технологииПрограммирование

Все о программировании


Linux Unix Алгоритмические языки Аналоговые и гибридные вычислительные устройства Архитектура микроконтроллеров Введение в разработку распределенных информационных систем Введение в численные методы Дискретная математика Информационное обслуживание пользователей Информация и моделирование в управлении производством Компьютерная графика Математическое и компьютерное моделирование Моделирование Нейрокомпьютеры Проектирование программ диагностики компьютерных систем и сетей Проектирование системных программ Системы счисления Теория статистики Теория оптимизации Уроки AutoCAD 3D Уроки базы данных Access Уроки Orcad Цифровые автоматы Шпаргалки по компьютеру Шпаргалки по программированию Экспертные системы Элементы теории информации

Обмен данными между процессами

Обмен данными между процессами с помощью файлов, отображенных на память, обладает высоким быстродействием, так как данные передаются между процессами непосредственно через виртуальную память.

Методика работы с файлами, отображаемыми на память, заключается в следующем.

Отображение создается функцией CreateFileMapping.
В качестве первого параметра для функции передается идентификатор открытого файла. Если отображение будет использоваться для передачи данных между процессами, удобно указать для него имя. Пользуясь этим именем, другие процессы смогут открыть отображение функцией OpenFileMapping.

Если создается отображение только для того чтобы обеспечить передачу данных между процессами, не нужно создавать файл на диске компьютера. Указав в качестве идентификатора файла значение (HANDLE)0xFFFFFFFF, создается отображение непосредственно в виртуальной памяти без использования дополнительного файла.

После создания объекта-отображения, следует выполнить отображение файла в память при помощи функции MapViewOfFile. В случае успеха эта функция вернет указатель на отображенную область памяти.

Перед завершением своей работы процессы должны отменить отображение файла UnmapViewOfFile и освободить идентификатор созданного объекта-отображения CloseHandle.

Пример. Один экземпляр программы создает отображаемый в память файл и записывает в него тестовую строку. Второй экземпляр – считывает строку из отображаемого файла. Для синхронизации используются события.

#include "windows.h"
#include "stdio.h"

HANDLE hEvent1, hEvent2;
HANDLE hMFile;
char Ev1[]="MyEvent1";
char Ev2[]="MyEvent2";
char Fn1[]="MyMemoryMappedFile";
char Mask;
LPVOID StartMFile;
char Buf[]="Buffer Is Empty              ";
int main(int argc, char* argv[])
{
Mask=FALSE;
if(!OpenEvent(EVENT_ALL_ACCESS, TRUE, Ev1)) {
printf("SERVER\n");
if(hEvent1=CreateEvent( NULL, TRUE, FALSE, Ev1 )) {
hEvent2=CreateEvent( NULL, TRUE, FALSE, Ev2 );
Mask=TRUE;} else { return 0;}
} else {
hEvent2=OpenEvent(EVENT_ALL_ACCESS, TRUE, Ev2);
printf("CLIENT\n");
}
if(Mask)
{
hMFile=CreateFileMapping((HANDLE)0xFFFFFFFF, NULL,
PAGE_READWRITE, 0, 100, Fn1);
if(!hMFile) { return 0;}
StartMFile=MapViewOfFile(hMFile, FILE_MAP_WRITE, 0, 0, 100);
if(!StartMFile) {  return 0;}
printf("BEFORE RECORD:\n%s\n",Buf);
CopyMemory(StartMFile, "Information From Server", 24);
printf("AFTER  RECORD:\n%s\n",Buf);
PulseEvent(hEvent1);
WaitForSingleObject(hEvent2, INFINITE);
} else
{
WaitForSingleObject(hEvent1, INFINITE);
hMFile=OpenFileMapping(FILE_MAP_READ, TRUE, Fn1);
if(!hMFile) { return 0;}
StartMFile=MapViewOfFile(hMFile, FILE_MAP_READ, 0, 0, 100);
if(!StartMFile) { return 0;}
printf("BEFORE RECORD: \n%s\n",Buf);
CopyMemory(Buf, StartMFile, 24);
printf("AFTER  RECORD: \n%s\n",Buf);
PulseEvent(hEvent2);
}
UnmapViewOfFile(hMFile);
CloseHandle(hMFile);
return 0;
}

 

Просмотров: 16630

Вернуться воглавление




Карта сайта Карта сайта укр


Уроки php mysql Программирование

Онлайн система счисления Калькулятор онлайн обычный Инженерный калькулятор онлайн Замена русских букв на английские для вебмастеров Замена русских букв на английские

Аппаратное и программное обеспечение Графика и компьютерная сфера Интегрированная геоинформационная система Интернет Компьютер Комплектующие компьютера Лекции Методы и средства измерений неэлектрических величин Обслуживание компьютерных и периферийных устройств Операционные системы Параллельное программирование Проектирование электронных средств Периферийные устройства Полезные ресурсы для программистов Программы для программистов Статьи для программистов Cтруктура и организация данных


 


Полезен материал? Поделись:

Не нашли то, что искали? Google вам в помощь!

 
 

© life-prog.ru При использовании материалов прямая ссылка на сайт обязательна.