![]() |
|
Модераторы: Daevaorn |
![]()
|
|
| Incinerated |
|
|||
|
Бывалый ![]() Профиль Группа: Участник Сообщений: 162 Регистрация: 18.5.2006 Где: Беларусь, Новопол оцк Репутация: нет Всего: нет |
К примеру есть приложение1, мое собственное. Оно запускается работает и работает скажем к примеру с vector<std::string>... Т.е. хранит какие то строки в процессе своей работы, работа непрерывная. Т.е. конец у нее есть, но по окончании процесс запускается заново.
Есть приложение2, тоже мое, которому нужно получить в любой момент времени доступ к данному вектору из приложения1. Каким образом этом можно организовать без использования файловой системе(запись в файл/чтение из файла), т.е. можно ли это организовать в памяти все и каким образом? И еще вопрос, можно ли изменять значения переменных приложения1 из приложения2, например, типа bool и тоже каким образом? P.S. я даже не знаю как это в гугле искать и не имею представления есть ли такие возможности, поэтому спрашиваю здесь. Спасибо. |
|||
|
||||
| Cheloveck |
|
|||
![]() Эксперт ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 1578 Регистрация: 26.7.2008 Где: Тула Репутация: 3 Всего: 32 |
есть
Добавлено через 1 минуту и 1 секунду Только обращу внимание на то, что программы должны иметь один и тот же рантайм, для корректной работы с STL объектами. -------------------- ![]() |
|||
|
||||
| Incinerated |
|
||||
|
Бывалый ![]() Профиль Группа: Участник Сообщений: 162 Регистрация: 18.5.2006 Где: Беларусь, Новопол оцк Репутация: нет Всего: нет |
нашел пример по вот этому:
но у меня возникла сразу проблема. У меня вектор классов, и внутри этого класса есть другие классы, небольшой пример:
вот примерно такая структура приложения1. Каким образом мне это загнать в FileMapping? просто в итоге, кол-во элементов класса c1 может достигнуть и одного миллиона. Это сообщение отредактировал(а) Incinerated - 4.11.2010, 11:33 |
||||
|
|||||
| boostcoder |
|
|||
![]() pattern`щик ![]() ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 5458 Регистрация: 1.4.2010 Репутация: 49 Всего: 110 |
даже не представляю как это может помочь задаче.. дай ссылку на пример. я для подобных задач использую boost.interprocess. конкретно ваша задача тут. |
|||
|
||||
| Incinerated |
|
|||
|
Бывалый ![]() Профиль Группа: Участник Сообщений: 162 Регистрация: 18.5.2006 Где: Беларусь, Новопол оцк Репутация: нет Всего: нет |
http://msdn.microsoft.com/en-us/library/aa...28VS.85%29.aspx а по поводу boost.interprocess есть вопрос, мне каждый вектор нужно так описать? |
|||
|
||||
| boostcoder |
|
|||
![]() pattern`щик ![]() ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 5458 Регистрация: 1.4.2010 Репутация: 49 Всего: 110 |
только тип. Добавлено через 1 минуту и 33 секунды и нафига вам это? это же просто байт-хранилище. |
|||
|
||||
| Incinerated |
|
|||
|
Бывалый ![]() Профиль Группа: Участник Сообщений: 162 Регистрация: 18.5.2006 Где: Беларусь, Новопол оцк Репутация: нет Всего: нет |
я просто не знал как организовать такую вещь и мне чуть выше посоветовали нечто похожее, на что я и нашел пример =) |
|||
|
||||
| Incinerated |
|
||||
|
Бывалый ![]() Профиль Группа: Участник Сообщений: 162 Регистрация: 18.5.2006 Где: Беларусь, Новопол оцк Репутация: нет Всего: нет |
вот тут указан размер 65536, я так понимаю сегмент нужно создавать до заполнения векторов и как узнать какой объем памяти выделять к примеру на 100 000 элементов или на 1 миллион? Нельзя же точно знать какой объем они будут занимать. Или можно написать скажем 1 миллиард(1 Gb) и все будет норм? Но опять таки, а если не хватит памяти или не надо столько, как быть с этим? |
||||
|
|||||
| boostcoder |
|
|||
![]() pattern`щик ![]() ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 5458 Регистрация: 1.4.2010 Репутация: 49 Всего: 110 |
так указывается максимальный размер сегмента. память сразу не выделяется. но наверное это зависит от ОСи. к примеру на линукс, у меня сегмент 8GB. а реально выделяется памяти масими 3.7GB когда в сегменте уже расположены объекты. получите исключение boost::interprocess::bad_alloc Добавлено через 11 минут и 18 секунд
т.е. суммарный объем объектов чуть меньше. |
|||
|
||||
| Incinerated |
|
|||
|
Бывалый ![]() Профиль Группа: Участник Сообщений: 162 Регистрация: 18.5.2006 Где: Беларусь, Новопол оцк Репутация: нет Всего: нет |
я все-таки не особо понял как мне нужно описать вектора мои, описав главный вот так:
вроде ничего лишнего нету, этот пример рабочий, хоть в нем и вырезаны куски, но я самое основное оставил. Т.е. когда запускаешь без параметра программа заполняет вектор и хранит его в общей памяти с таким-то названием, когда с параметром запускаешь он читает данные из этой памяти и выводит в консоль, все в принципе работает. Но возникает проблема когда я добавляю в класс, к примеру, c3 вектор класса c1. Как его нужно описать? описал как vector<c1> *v1 = new vector<c1>;, данные заносятся в вектор myvector, проверил, а вот считаться они не могут, т.е. когда запускаешь программу с параметром для считывания данных, данные класса с3, например, типа wstring считываются, а вектор v1 - пуст. Просто для меня это все ново и не понятно. Как надо было описать вектор класса с1? |
|||
|
||||
| boostcoder |
|
|||
![]() pattern`щик ![]() ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 5458 Регистрация: 1.4.2010 Репутация: 49 Всего: 110 |
||||
|
||||
| Incinerated |
|
|||
|
Бывалый ![]() Профиль Группа: Участник Сообщений: 162 Регистрация: 18.5.2006 Где: Беларусь, Новопол оцк Репутация: нет Всего: нет |
т.е. на строчке: vector<sFile>::iterator it1 = tmp.m_files->begin(); кидает ошибку памяти... в отладке видно что вектор m_files пуст. Это сообщение отредактировал(а) Incinerated - 4.11.2010, 19:09 |
|||
|
||||
| boostcoder |
|
|||
![]() pattern`щик ![]() ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 5458 Регистрация: 1.4.2010 Репутация: 49 Всего: 110 |
уберите new. во первых - нелепо использовать new тут. во вторых - проблема по все видимости в этом. Добавлено @ 19:40 я бы это заменил на:
Это сообщение отредактировал(а) boostcoder - 4.11.2010, 20:03 |
|||
|
||||
| Incinerated |
|
||||||||
|
Бывалый ![]() Профиль Группа: Участник Сообщений: 162 Регистрация: 18.5.2006 Где: Беларусь, Новопол оцк Репутация: нет Всего: нет |
Почему нелепо создавать объект в конструкторе класса? И почему проблема в этом, если в этом куске кода все работает как я и писал выше:
т.е. если после цикла запустить цикл выводящий элементы вектора m_files, то он все выводит хорошо. А во 2-ом приложении вектор пуст. И каким образом инициализация вектора в конструкторе может этому мешать?
что такое аксессоры? и у вас получилось map - карта? слышал, но толком не знаю, но так как вы назвали _tree - это видимо некое дерево или граф. И получается каждая ветка имеет 2 значения wstring и вектор типа wstring и все, а мне надо больше у меня sFile имеет более 10 переменных, их все перечислять через запятую или как? и как с этим тогда работать, и почему нельзя сделать так как я написал(структура)? Это сообщение отредактировал(а) Incinerated - 4.11.2010, 21:25 |
||||||||
|
|||||||||
| boostcoder |
|
|||
![]() pattern`щик ![]() ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 5458 Регистрация: 1.4.2010 Репутация: 49 Всего: 110 |
потому что -
вы пытаетесь расшарить область памяти между процессами. при этом, часть объектов которые должны быть в расшаренной памяти, создаете в локальной памяти процесса. и как в таком случае, сторонний процесс получит локальную память другого процесса? типа того. где ключ - имя каталога, а значение - список имен файлов этого каталога. это как пример. храните в векторе не строки, и ваши структуры. разницы никакой.. |
|||
|
||||
![]()
|
| Правила форума "С++:Общие вопросы" | |
|
|
Добро пожаловать!
Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, Earnest Daevaorn |
| 0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей) | |
| 0 Пользователей: | |
| « Предыдущая тема | C/C++: Общие вопросы | Следующая тема » |
|
|
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности Powered by Invision Power Board(R) 1.3 © 2003 IPS, Inc. |