Форум программистов, компьютерный форум, киберфорум
C++
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.64/14: Рейтинг темы: голосов - 14, средняя оценка - 4.64
-3 / 11 / 5
Регистрация: 22.01.2011
Сообщений: 201

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

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

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

Интересует как сделать так чтобы две разные программы могли оперировать одним и тем-же массивом (в данном случае массив состоит из чисел) находящимся в оперативной памяти.
0
Programming
Эксперт
39485 / 9562 / 3019
Регистрация: 12.04.2006
Сообщений: 41,671
Блог
22.01.2011, 13:22
Ответы с готовыми решениями:

Как сделать так, чтобы разные файлы могли видеть друг друга?
Есть 2 формы. Одна вызывает другую. Есть класс, который подключается к 1-ой форме. Но когда я подключаю его ко 2-ой, она его не видит. ...

Как сделать так, чтобы 2 программы могли читать один и тот же файл в одно время
Как сделать так, чтобы 2 программы могли читать один и тот-же файл в одно время. Заренее спасибо

Две разные планки оперативной памяти как лучше ?
Всем доброго времени суток ! Поставил две планки оперативки одна 333Мгц, а вторая 400Мгц. Скажите пожалуйста нужно ли что-то менять в...

15
бжни
 Аватар для alex_x_x
2473 / 1684 / 135
Регистрация: 14.05.2009
Сообщений: 7,162
22.01.2011, 14:34
sfinexer, самое простое создается файл, потом оба процесса проецируют в память посредством memory file mapping, для этого даже физически файл создавать не надо, у рихтера есть пример
http://www.hackchina.com/en/r/... .cpp__html
0
-3 / 11 / 5
Регистрация: 22.01.2011
Сообщений: 201
22.01.2011, 14:48  [ТС]
Цитата Сообщение от alex_x_x Посмотреть сообщение
sfinexer, самое простое создается файл, потом оба процесса проецируют в память посредством memory file mapping, для этого даже физически файл создавать не надо, у рихтера есть пример
http://www.hackchina.com/en/r/... .cpp__html

Мне бы хотелось бы оперировать в двух программах с массивами, а не с файлом, так как запись и чтение скорее всего будет асинхронной.
Может есть метод именно как-то приравнять указатели на память, чтобы программы видели этот массив?
Массив порядка 50 мегабайт.
0
бжни
 Аватар для alex_x_x
2473 / 1684 / 135
Регистрация: 14.05.2009
Сообщений: 7,162
22.01.2011, 14:55
Цитата Сообщение от sfinexer Посмотреть сообщение
Мне бы хотелось бы оперировать в двух программах с массивами, а не с файлом, так как запись и чтение скорее всего будет асинхронной.
идет проецирование в память, те доступ к файлу будет через память, у вас будет адрес, точно как с массивом
насчет асинхронности не уверен, но думаю флагами это лечится
а если 50 метров то тем более есть смысл использования разделяемого файла
0
-3 / 11 / 5
Регистрация: 22.01.2011
Сообщений: 201
22.01.2011, 15:57  [ТС]
Цитата Сообщение от alex_x_x Посмотреть сообщение
идет проецирование в память, те доступ к файлу будет через память, у вас будет адрес, точно как с массивом
насчет асинхронности не уверен, но думаю флагами это лечится
а если 50 метров то тем более есть смысл использования разделяемого файла
Разделять нельзя, доступ к элементам массива идет не последовательно, может быть такое что в одной ните первой программы используются одна часть массива например четные элементы, в другой ните первой программы нечетные элементы.
И есть программа подготовки констант для расчета, она должна работать сама по себе, она в принципе может и вобще быть не запущена, но в идеале она подготавливает константы для расчета так как ей в голову взбредет, нулевой элемент массива я хочу использовать как флаг останова расчета или прерывания расчета.
В случае с файлом как мне известно чтобы записать в него что-то он должен быть закрыт сторонней программой, а писать цикл открытия/закрытия файла мне бы не хотелось, так как это замедлит работу программ.
Вторая программа также может динамически писать в этот массив свои расчетные константы, а основная программа брать их от туда и делать расчет следующих параметров.

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

А как же сделано в шахматных программах? там отдельно оболочка (например тотже фритц) и отдельно шахматный движек (например рыбка) они же как-то обмениваются результатами между собой...
0
бжни
 Аватар для alex_x_x
2473 / 1684 / 135
Регистрация: 14.05.2009
Сообщений: 7,162
22.01.2011, 16:04
Цитата Сообщение от sfinexer Посмотреть сообщение
Разделять нельзя, доступ к элементам массива идет не последовательно, может быть такое что в одной ните первой программы используются одна часть массива например четные элементы, в другой ните первой программы нечетные элементы.
прочитайте про file mapping, иначе смысла нету продолжать разговор
0
-3 / 11 / 5
Регистрация: 22.01.2011
Сообщений: 201
22.01.2011, 18:38  [ТС]
Цитата Сообщение от alex_x_x Посмотреть сообщение
прочитайте про file mapping, иначе смысла нету продолжать разговор

file mapping как я читал, загружает файл в область оперативной памяти которую система выделила как адресуемую для программы.
Это несколько другое.
Иными словами (могу быть не прав), если программа кушает 50 мегабайт оперативной памяти, после file mapping она ее увеличит на величину этого файла. Что совершенно мне не подходит, ибо из ДРУГОЙ программы (не ПОД программы) я не могу попасть с область видимости первой программы.
0
 Аватар для Manjak
270 / 176 / 46
Регистрация: 12.03.2010
Сообщений: 494
22.01.2011, 18:41
Цитата Сообщение от sfinexer Посмотреть сообщение
(могу быть не прав)
Таки не прав
0
Эксперт С++
5058 / 3118 / 271
Регистрация: 11.11.2009
Сообщений: 7,044
22.01.2011, 21:03
Можно через треды и мьютексы сделать, правда это-таки будет "одна большая программа", а не "много маленьких", но вся прелесть в том, что вы можете использовать для каждой части (каждой нити) отдельную функцию, типа main1, main2 и main3, и развивать свои "маленькие программы" совершенно параллельно, можно их даже по разным сурс-файлам разнести.
0
 Аватар для Kastaneda
5232 / 3205 / 362
Регистрация: 12.12.2009
Сообщений: 8,143
Записей в блоге: 2
23.01.2011, 16:16
Цитата Сообщение от silent_1991 Посмотреть сообщение
правда это-таки будет "одна большая программа", а не "много маленьких"
Через mutex'ы можно сделать 2 самостоятельные программы.
пример
0
-3 / 11 / 5
Регистрация: 22.01.2011
Сообщений: 201
23.01.2011, 20:05  [ТС]
Цитата Сообщение от Kastaneda Посмотреть сообщение
Через mutex'ы можно сделать 2 самостоятельные программы.
пример
"Программа чтения будет ждать пока программа записи не разрешит доступ."
Буду делать все в одной программе вобщем.
0
23.01.2011, 21:37

Не по теме:

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

0
бжни
 Аватар для alex_x_x
2473 / 1684 / 135
Регистрация: 14.05.2009
Сообщений: 7,162
23.01.2011, 22:15
вот так межпроцессное взаимодействие свелось к двум потокам
1
-3 / 11 / 5
Регистрация: 22.01.2011
Сообщений: 201
24.01.2011, 12:31  [ТС]
Цитата Сообщение от alex_x_x Посмотреть сообщение
вот так межпроцессное взаимодействие свелось к двум потокам
Ну не к двум потокам конечно может порядка 10-15 но не столь важно просто программы принципиально разные, вот и хотел разделить.
0
267 / 189 / 33
Регистрация: 15.01.2011
Сообщений: 681
24.01.2011, 16:19
как вариант можно попробовать организовать доступ к ресурсу через пайпы, т.е. написать программу (сервер) которая будет иметь монопольный доступ к ресурсу (писать ,читать) а все другие заитересованные в данном ресурсе программы (клиенты) будут подключаться через пайпы ,сокеты, и т.д. и запрашивать необходимые действия у сервера. Получится что вроде базы данных))).
0
24.01.2011, 17:25

Не по теме:

ssXXss, я о пайпах сразу подумал))) но опотом почему-то они из головы вылетели, оставив место тредам...

0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
inter-admin
Эксперт
29715 / 6470 / 2152
Регистрация: 06.03.2009
Сообщений: 28,500
Блог
24.01.2011, 17:25
Помогаю со студенческими работами здесь

Графика: сделать так, чтобы две линии, исходящие из одной точки, как бы шагали
надо сделать так, чтобы две линии, исходящие из одной точки, как бы шагали. пожалуйста

Как сделать так чтобы с одной переменной можно было работать на нескольких формах?
Как сделать так чтобы с одной переменной можно было работать на нескольких формах?

Как сделать так, чтобы строки одной таблицы не могли удалиться до тех пор, пока существуют соответствующие строки другой таблицы?
Имеются две таблицы: Заявки и соответствующие заявкам Испытания. Вначале пользователь заполняет строку Заявки, потом переходит на...


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

Или воспользуйтесь поиском по форуму:
16
Ответ Создать тему
Новые блоги и статьи
Инструменты COM: Сохранение данный из VARIANT в файл и загрузка из файла в VARIANT
bedvit 28.01.2026
Сохранение базовых типов COM и массивов (одномерных или двухмерных) любой вложенности (деревья) в файл, с возможностью выбора алгоритмов сжатия и шифрования. Часть библиотеки BedvitCOM Использованы. . .
Загрузка PNG с альфа-каналом на SDL3 для Android: с помощью SDL_LoadPNG (без SDL3_image)
8Observer8 28.01.2026
Содержание блога SDL3 имеет собственные средства для загрузки и отображения PNG-файлов с альфа-каналом и базовой работы с ними. В этой инструкции используется функция SDL_LoadPNG(), которая. . .
Загрузка PNG с альфа-каналом на SDL3 для Android: с помощью SDL3_image
8Observer8 27.01.2026
Содержание блога SDL3_image - это библиотека для загрузки и работы с изображениями. Эта пошаговая инструкция покажет, как загрузить и вывести на экран смартфона картинку с альфа-каналом, то есть с. . .
Влияние грибов на сукцессию
anaschu 26.01.2026
Бифуркационные изменения массы гриба происходят тогда, когда мы уменьшаем массу компоста в 10 раз, а скорость прироста биомассы уменьшаем в три раза. Скорость прироста биомассы может уменьшаться за. . .
Воспроизведение звукового файла с помощью SDL3_mixer при касании экрана Android
8Observer8 26.01.2026
Содержание блога SDL3_mixer - это библиотека я для воспроизведения аудио. В отличие от инструкции по добавлению текста код по проигрыванию звука уже содержится в шаблоне примера. Нужно только. . .
Установка Android SDK, NDK, JDK, CMake и т.д.
8Observer8 25.01.2026
Содержание блога Перейдите по ссылке: https:/ / developer. android. com/ studio и в самом низу страницы кликните по архиву "commandlinetools-win-xxxxxx_latest. zip" Извлеките архив и вы увидите. . .
Вывод текста со шрифтом TTF на Android с помощью библиотеки SDL3_ttf
8Observer8 25.01.2026
Содержание блога Если у вас не установлены Android SDK, NDK, JDK, и т. д. то сделайте это по следующей инструкции: Установка Android SDK, NDK, JDK, CMake и т. д. Сборка примера Скачайте. . .
Использование SDL3-callbacks вместо функции main() на Android, Desktop и WebAssembly
8Observer8 24.01.2026
Содержание блога Если вы откроете примеры для начинающих на официальном репозитории SDL3 в папке: examples, то вы увидите, что все примеры используют следующие четыре обязательные функции, а. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru