Форум программистов, компьютерный форум CyberForum.ru

C++

Войти
Регистрация
Восстановить пароль
 
 
Рейтинг: Рейтинг темы: голосов - 13, средняя оценка - 5.00
sfinexer
-6 / 8 / 2
Регистрация: 22.01.2011
Сообщений: 152
#1

Как сделать так, чтобы две разные программы могли работать с одной и той же областью оперативной памяти? - C++

22.01.2011, 13:22. Просмотров 1638. Ответов 15
Метки нет (Все метки)

Собственно даже незнаю куда копать.
Пробовал в одной программе вывести указатель на массив, а в другой указателю присвоить это значение чего-то компилятор ругается(

Интересует как сделать так чтобы две разные программы могли оперировать одним и тем-же массивом (в данном случае массив состоит из чисел) находящимся в оперативной памяти.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
22.01.2011, 13:22
Здравствуйте! Я подобрал для вас темы с ответами на вопрос Как сделать так, чтобы две разные программы могли работать с одной и той же областью оперативной памяти? (C++):

Как мне сделать так, чтобы данный текстовый файл был открыт один раз при запуске программы и закрыт при закрытии программы? - C++ Builder
Привет! Возник следующий вопрос. Программа состоит из основного окна Form1 и нескольких Unit. По таймеру в Form1 запускается один из...

как сделать так чтобы пользователь не выходил из программы - Visual C++
\\ Здесь р - количество неправильных ответов, как сделать так чтобы пользователь не выходил из программы, пока не даст минимальное кол-во...

Как сделать так, чтобы функция rand() возвращала разные значения - C++
Добрый вечер, как можно в visual studio в цикле каждый раз задавать новые рандомные значения перменной, к примеру for(int i=0;i<10;i++) ...

Как сделать так, чтобы условие начало работать?Подскажите,пожалуйста - C++
Здравствуйте. Прошу,подскажите,пожалуйста, ступор уже. Вот прога: for(n=1;n<=100;n++) do { P0=1/(exp(r,n));...

Как сделать так чтобы при изменении одной переменной изменялась другая? - C++
Как сделать так чтобы при изменении одной переменной изменялась другая?

Как переопределить функцию так, чтобы она не только могла принимать разные параметры, но и возвращать тоже разные? - C++
То есть я считаю несправедливым, если такое проканывает: void f () {;} void f (int) {;} а такое нет: void f (int) {;} int f...

Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
alex_x_x
бжни
2447 / 1652 / 84
Регистрация: 14.05.2009
Сообщений: 7,162
22.01.2011, 14:34 #2
sfinexer, самое простое создается файл, потом оба процесса проецируют в память посредством memory file mapping, для этого даже физически файл создавать не надо, у рихтера есть пример
http://www.hackchina.com/en/r/51533/MMFShare.cpp__html
sfinexer
-6 / 8 / 2
Регистрация: 22.01.2011
Сообщений: 152
22.01.2011, 14:48  [ТС] #3
Цитата Сообщение от alex_x_x Посмотреть сообщение
sfinexer, самое простое создается файл, потом оба процесса проецируют в память посредством memory file mapping, для этого даже физически файл создавать не надо, у рихтера есть пример
http://www.hackchina.com/en/r/51533/MMFShare.cpp__html

Мне бы хотелось бы оперировать в двух программах с массивами, а не с файлом, так как запись и чтение скорее всего будет асинхронной.
Может есть метод именно как-то приравнять указатели на память, чтобы программы видели этот массив?
Массив порядка 50 мегабайт.
alex_x_x
бжни
2447 / 1652 / 84
Регистрация: 14.05.2009
Сообщений: 7,162
22.01.2011, 14:55 #4
Цитата Сообщение от sfinexer Посмотреть сообщение
Мне бы хотелось бы оперировать в двух программах с массивами, а не с файлом, так как запись и чтение скорее всего будет асинхронной.
идет проецирование в память, те доступ к файлу будет через память, у вас будет адрес, точно как с массивом
насчет асинхронности не уверен, но думаю флагами это лечится
а если 50 метров то тем более есть смысл использования разделяемого файла
sfinexer
-6 / 8 / 2
Регистрация: 22.01.2011
Сообщений: 152
22.01.2011, 15:57  [ТС] #5
Цитата Сообщение от alex_x_x Посмотреть сообщение
идет проецирование в память, те доступ к файлу будет через память, у вас будет адрес, точно как с массивом
насчет асинхронности не уверен, но думаю флагами это лечится
а если 50 метров то тем более есть смысл использования разделяемого файла
Разделять нельзя, доступ к элементам массива идет не последовательно, может быть такое что в одной ните первой программы используются одна часть массива например четные элементы, в другой ните первой программы нечетные элементы.
И есть программа подготовки констант для расчета, она должна работать сама по себе, она в принципе может и вобще быть не запущена, но в идеале она подготавливает константы для расчета так как ей в голову взбредет, нулевой элемент массива я хочу использовать как флаг останова расчета или прерывания расчета.
В случае с файлом как мне известно чтобы записать в него что-то он должен быть закрыт сторонней программой, а писать цикл открытия/закрытия файла мне бы не хотелось, так как это замедлит работу программ.
Вторая программа также может динамически писать в этот массив свои расчетные константы, а основная программа брать их от туда и делать расчет следующих параметров.

Объединение двух программ в один exe файл не целесообразна из соображения что развивать большую программу сложнее чем маленькие, к тому же есть вероятность что программы могут быть написаны на разных языках (например фортран и C++).

А как же сделано в шахматных программах? там отдельно оболочка (например тотже фритц) и отдельно шахматный движек (например рыбка) они же как-то обмениваются результатами между собой...
alex_x_x
бжни
2447 / 1652 / 84
Регистрация: 14.05.2009
Сообщений: 7,162
22.01.2011, 16:04 #6
Цитата Сообщение от sfinexer Посмотреть сообщение
Разделять нельзя, доступ к элементам массива идет не последовательно, может быть такое что в одной ните первой программы используются одна часть массива например четные элементы, в другой ните первой программы нечетные элементы.
прочитайте про file mapping, иначе смысла нету продолжать разговор
sfinexer
-6 / 8 / 2
Регистрация: 22.01.2011
Сообщений: 152
22.01.2011, 18:38  [ТС] #7
Цитата Сообщение от alex_x_x Посмотреть сообщение
прочитайте про file mapping, иначе смысла нету продолжать разговор

file mapping как я читал, загружает файл в область оперативной памяти которую система выделила как адресуемую для программы.
Это несколько другое.
Иными словами (могу быть не прав), если программа кушает 50 мегабайт оперативной памяти, после file mapping она ее увеличит на величину этого файла. Что совершенно мне не подходит, ибо из ДРУГОЙ программы (не ПОД программы) я не могу попасть с область видимости первой программы.
Manjak
269 / 175 / 7
Регистрация: 12.03.2010
Сообщений: 494
22.01.2011, 18:41 #8
Цитата Сообщение от sfinexer Посмотреть сообщение
(могу быть не прав)
Таки не прав
silent_1991
Эксперт С++
4963 / 3039 / 149
Регистрация: 11.11.2009
Сообщений: 7,027
Завершенные тесты: 1
22.01.2011, 21:03 #9
Можно через треды и мьютексы сделать, правда это-таки будет "одна большая программа", а не "много маленьких", но вся прелесть в том, что вы можете использовать для каждой части (каждой нити) отдельную функцию, типа main1, main2 и main3, и развивать свои "маленькие программы" совершенно параллельно, можно их даже по разным сурс-файлам разнести.
Kastaneda
Форумчанин
Эксперт С++
4652 / 2860 / 228
Регистрация: 12.12.2009
Сообщений: 7,268
Записей в блоге: 2
Завершенные тесты: 1
23.01.2011, 16:16 #10
Цитата Сообщение от silent_1991 Посмотреть сообщение
правда это-таки будет "одна большая программа", а не "много маленьких"
Через mutex'ы можно сделать 2 самостоятельные программы.
пример
sfinexer
-6 / 8 / 2
Регистрация: 22.01.2011
Сообщений: 152
23.01.2011, 20:05  [ТС] #11
Цитата Сообщение от Kastaneda Посмотреть сообщение
Через mutex'ы можно сделать 2 самостоятельные программы.
пример
"Программа чтения будет ждать пока программа записи не разрешит доступ."
Буду делать все в одной программе вобщем.
silent_1991
23.01.2011, 21:37
  #12

Не по теме:

Kastaneda, ну я-то предложил через треды плюс мьютексы, а тут только одна большая

alex_x_x
бжни
2447 / 1652 / 84
Регистрация: 14.05.2009
Сообщений: 7,162
23.01.2011, 22:15 #13
вот так межпроцессное взаимодействие свелось к двум потокам
sfinexer
-6 / 8 / 2
Регистрация: 22.01.2011
Сообщений: 152
24.01.2011, 12:31  [ТС] #14
Цитата Сообщение от alex_x_x Посмотреть сообщение
вот так межпроцессное взаимодействие свелось к двум потокам
Ну не к двум потокам конечно может порядка 10-15 но не столь важно просто программы принципиально разные, вот и хотел разделить.
ssXXss
266 / 188 / 10
Регистрация: 15.01.2011
Сообщений: 681
24.01.2011, 16:19 #15
как вариант можно попробовать организовать доступ к ресурсу через пайпы, т.е. написать программу (сервер) которая будет иметь монопольный доступ к ресурсу (писать ,читать) а все другие заитересованные в данном ресурсе программы (клиенты) будут подключаться через пайпы ,сокеты, и т.д. и запрашивать необходимые действия у сервера. Получится что вроде базы данных))).
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
24.01.2011, 16:19
Привет! Вот еще темы с ответами:

Как сделать так чтобы при каждом выделении памяти в методе была возможность ее очистить и вернуть результат? - C++
Доброго времени суток! Есть код класса и хотелось бы устранить в нем следующие недочеты: 1) Как сделать так чтобы при каждом выделении...

как сделать так, чтобы интерфейс программы находился в отдельном файле - C++
как в 6 версии visual studio сделать так, чтобы интерфейс программы находился в файле complex.h, которая была бы защищена от повторного...

Как, при разнесении программы на части, в С++, сделать так, чтобы подключаемый файл заметил компилятор? - C++
думаю, всё ясно из темы :) Добавлено через 47 секунд Т.е. куда помещать подключаемый файл?

Как сделать так чтобы переменная в описании одной функции была доступна в описании другой? - C++
Как сделать так чтобы переменная в описании одной функции была доступна в описании другой? Заранее спасибо.


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
Yandex
Объявления
24.01.2011, 16:19
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2017, vBulletin Solutions, Inc.
Рейтинг@Mail.ru