На главную Наши проекты:
Журнал   ·   Discuz!ML   ·   Wiki   ·   DRKB   ·   Помощь проекту
ПРАВИЛА FAQ Помощь Участники Календарь Избранное RSS
msm.ru
Обратите внимание:
1. Прежде чем начать новую тему или отправить сообщение, убедитесь, что вы не нарушаете правил форума!
2. Обязательно воспользуйтесь поиском. Возможно, Ваш вопрос уже обсуждали. Полезные ссылки приведены ниже.
3. Темы с просьбой выполнить какую-либо работу за автора в этом разделе не обсуждаются.
4. Используйте теги [ code=cpp ] ...текст программы... [ /code ] для выделения текста программы подсветкой.
5. Помните, здесь телепатов нет. Старайтесь формулировать свой вопрос максимально грамотно и чётко: Как правильно задавать вопросы
6. Запрещено отвечать в темы месячной и более давности без веских на то причин.

Полезные ссылки:
user posted image FAQ Сайта (C++) user posted image FAQ Форума user posted image Наши Исходники user posted image Поиск по Разделу user posted image MSDN Library Online (Windows Driver Kit) user posted image Google

Ваше мнение о модераторах: user posted image B.V.
Модераторы: B.V.
Страницы: (2) [1] 2  все  ( Перейти к последнему сообщению )  
> Общий массив для двух приложений (процессов)? , XE7, Win7
    Можно ли и как организовать общее адресное пространство для разных приложений (процессов) без использования СУБД и без передачи всего массива данных?
    Например, одно приложение обновляет большой массив данных, а другое "на лету" их использует.
    Спасибо.
      https://www.google.ru/#newwindow=1&q=%D1%80...2%D1%8C+windows

      Добавлено
      срадствами boost
      Сообщение отредактировано: shm -
        Спасибо, shm, искал по разному, но не догадался посмотреть сочетание "разделяемая память".
          Цитата vlad2 @
          а другое "на лету" их использует.


          Почтовые ячейки :lol: Правда хрени этой в обед сто лет.
            Цитата JoeUser @
            Почтовые ячейки
            Хотел бы попроще, тем более, сеть не нужна, все процессы - на одном клиенте.

            Нашёл, что:
            "В Windows существует два способа создания разделяемой секции памяти. Программист может поместить часть глобальных переменных приложения в отдельную секцию данных и установить атрибут “shared” для неё. Для этого используются директива “#pragma section” или параметр командной строки сборщика “/SECTION”. В результате единственная копия помеченных переменных будут использоваться всеми процессами, загрузившими .exe или .dll. Второй способ предполагает использование функций CreateFileMapping, MapViewOfFileEx и прочих."
            Первый способ, кажется, самым простым, правда, пока не нашёл, как им пользоваться.
              Для тебя подходит вариант #2. Для не освоивших гугл прилагаю пример на сайте мелкомягких.
                Цитата shm @
                Для тебя подходит вариант #2
                Про FileMapping слышал и посматривал давно. Перед тем как копать в эту (или другую) сторону, хотел бы всё-таки уточнить свою задачу:
                есть динамический массив структур, который с каким-то шагом по времени меняется как по значению данных, так и по длине в одном приложении (процессе). Другому приложению, хочу передавать только адрес начала массива и его длину, по которым он, например, строит графики. Могу я использовать FileMapping таким образом на "живом" массиве без копирования данных?
                  Цитата vlad2 @
                  "живом" массиве без копирования данных?

                  Можешь.
                    Цитата shm @
                    Можешь.
                    Всё-таки мне придётся постоянно копировать (CopyMemory) большой массив по адресу, полученному от MapViewOfFile.
                    Мои данные - это массив объектов класса, в который, в том числе, входит массив структур. И эти данные я вынужден постоянно копировать, вместо того, чтобы просто передать адрес начала моего массива другому процессу, что, конечно, невозможно, т.к. он в другом адресном пространстве (.
                      Цитата vlad2 @
                      Всё-таки мне придётся постоянно копировать (CopyMemory) большой массив по адресу, полученному от MapViewOfFile.

                      А что мешает прямо писать по адресу, который получен от MapViewOfFile?
                        Цитата shm @
                        А что мешает прямо писать по адресу, который получен от MapViewOfFile?
                        Да я думал, но не очень представляю, как это сделать.
                        Допустим, размещу по этому адресу объекты класса. Но в классе, в числе других переменных, содержится адрес массива структур, и размер этого массива всё время разный. Как быть с этим?
                          Цитата vlad2 @
                          И эти данные я вынужден постоянно копировать, вместо того, чтобы просто передать адрес начала моего массива другому процессу, что, конечно, невозможно, т.к. он в другом адресном пространстве (.

                          Посмотри тут
                            Цитата ЫукпШ @
                            Посмотри тут
                            Спасибо, я этого не знал.
                            Правда сразу же возник вопрос: что значит, что "область, которая читается, должна быть доступна" (area to be read must be accessible)?
                            А от копирования и здесь не избавиться: "ReadProcessMemory копирует данные в заданном адресе, в диапазоне от адресного пространства указанного процесса в заданный определенный буфер текущего процесса".
                            Но всё равно посмотреть в эту сторону стоит.
                              Цитата vlad2 @
                              Правда сразу же возник вопрос: что значит, что "область, которая читается, должна быть доступна" (area to be read must be accessible)?

                              Посмотри это.
                                Цитата ЫукпШ @
                                Посмотри тут

                                Из пушки по воробьям. ИМХО.

                                Добавлено
                                Цитата vlad2 @
                                содержится адрес массива структур, и размер этого массива всё время разный. Как быть с этим?

                                Шо мешает массив структур тоже там же разместить сразу за классом?

                                Добавлено
                                Ну и это самое. Не стоит рассчитывать на валидность указателей в другом адресном пространстве. Области виртуальной памяти отображенные на разделяемую память в них будут отличаться, так что серилизация данных в той или иной степени нужна.
                                Сообщение отредактировано: shm -
                                0 пользователей читают эту тему (0 гостей и 0 скрытых пользователей)
                                0 пользователей:


                                Рейтинг@Mail.ru
                                [ Script execution time: 0,0375 ]   [ 18 queries used ]   [ Generated: 23.04.24, 07:21 GMT ]