У меня следующая проблема, и я понимаю, что мне нужно использовать либо IPC через общую память, либо сетевые сокеты.
У меня есть один исполняемый файл (то есть отдельный .exe), скомпилированный с помощью VS2010, который откуда-то получает данные, и он должен сделать эти данные доступными для второго исполняемого файла.
boost::interprocess::managed_shared_memory managed_shm(
boost::interprocess::open_or_create,
"MyMemBlock",
4000000);
Второй исполняемый файл скомпилирован с помощью VS2012 и должен получать эти данные (или извлекать их из памяти) и обрабатывать их.
// fails with a boost::interprocess::interprocess_exception
boost::interprocess::managed_shared_memory managed_shm(
boost::interprocess::open_only,
"MyMemBlock");
Все должно быть максимально быстро. Компиляция обоих исполняемых файлов с одной и той же версией Visual Studio не возможна, одна кодовая база компилируется только с VS2010, другая — только с VS2012/2013.
Однако моя первая попытка с boost::interprocess не сработала (второй процесс выдает boost::interprocess::interprocess_exception), и я не совсем понимаю, как именно разделяется память, или, точнее, как распределяется информация о памяти передается от одного процесса к другому. Как первый исполняемый файл заполняет информацию о блоке общей памяти? Это работает только для нескольких процессов внутри одного исполняемого файла? Не несколько .exe? Должна ли это быть одна и та же DLL-библиотека Boost, используемая обоими исполняемыми файлами? Является ли мой единственный вариант IPC через сокеты?
std::string
в разделяемой памяти, потому что это так.) - person David Schwartz   schedule 12.12.2013