! | Данная информация предназначена только только для IT-специалистов по системной интеграции модулей БИОСОФТ-М. (см. Руководства пользователя к программным продуктам) |
Для оперативной и относительно безопасной пересылки потоков бинарных данных между двумя или более процессами в Interproc реализован CInterprocRingIfaceGp.
Реализовать универсальную возможность передавать потоки байтов из одного процесса в другой. Оптимизированную для пересылки приборных сигналов между параллельно работающими процессами.
Базовый не универсальный код уже использовался в Paradop для пересылки спектра. Унификация потребовалась для Unimod.
Всем приложениям доступен объект CInterprocRingIfaceGp.
i | Не забывайте менять ID буфера когда изменяется структура передаваемых данных в новой версии программы, чтобы она даже не пыталась работать со старой! |
Каждый разделяемый буфер имеет уникальный глобальный в системе строковый идентификатор. Указывается при инициализации.
Разделяемая память физически остается аллокированной до тех пор пока существует хотя бы один объект CInterprocRingIfaceGp инициализированный с ее идентификатором. Деструктор CInterprocRingIfaceGp автоматически освобождает память. В силу неопределенности деструктора следует вызывать CloseInterprocRing() для освобождения системных ресурсов.
Все процессы открывают буфер. Только один из них пишет туда (StoreIntoInterprocRing()). Все остальные могут вычитывать (RetrieveFromInterprocRing()).
Принцип FIFO. Кто не успел вычитать тот опоздал и привет кусок сигнала.