У меня есть массив, который мне нужно разделить между двумя процессами. Первый процесс имеет инъецированную DLL, которая постоянно захватывает информацию о нескольких объектах, а второй процесс должен получать эту информацию. Я постоянно обновляю этот массив (данные в объекте сильно меняются), а другой процесс должен постоянно получать эти обновления. Я видел примеры, когда люди используют общую память, но я не уверен, как использовать ее для постоянного обновления массива. Любой совет или код, который вы можете бросить на меня?Обмен массивом между двумя процессами
ответ
Вы можете использовать memory mapped file, чтобы поделиться своим массивом между несколькими процессами.
Вы можете обмениваться данными в DLL между процессами, загружающими эту DLL. См. How do I share data in my DLL with an application or with other DLLs? для получения более подробной информации об использовании #pragma data_seg
. Поэтому, если вы храните массив в своей DLL, и оба процесса открывают DLL, все, что вам нужно, это некоторая синхронизация (например, мьютекс) для арбитража совместного доступа к данным.
Для удобства вы, вероятно, захотите реализовать экспортированные функции в DLL для чтения/записи данных массива, а не для экспорта самого массива raw.
Из-за природы процесса, в который я впрыскиваю (видеоигра с антихристом), мне пришлось вводить DLL таким образом, чтобы на самом деле это не было DLL. Я использую DLL для своего PE-заголовка, поэтому я могу обрабатывать все перемещение и импортировать зависимости, которые могут существовать. Затем я сопоставляю dll минус PE-заголовок в удаленном процессе, а затем выполняю функцию основного потока (а не dllmain, так как dllmain выполняет только основной поток). – haze
- 1. Обмен потоками между процессами?
- 2. Webmethods - обмен информацией между двумя процессами
- 3. Обмен сообщениями между двумя процессами в Erlang
- 4. Android-обмен SurfaceTexture между двумя процессами
- 5. Обмен памятью между двумя процессами (C, Windows)
- 6. Обмен нитями между процессами
- 7. Обмен переменной между процессами
- 8. Python: обмен сообщениями между процессами
- 9. Обмен HDC между различными процессами
- 10. обмен объектами ядра между процессами
- 11. Обмен данными между mod_python процессами
- 12. Обмен данными между разветвленными процессами
- 13. Delphi XE2: Обмен переменной между двумя разными процессами?
- 14. Обмен данными между двумя процессами с индексом в C
- 15. Общайтесь между двумя процессами
- 16. Взаимосвязь между двумя процессами
- 17. Обмен данными между процессами MPI (гало)
- 18. Поделиться массивом Семафоры между двумя процессами | linux C
- 19. mq_notify между двумя процессами - C
- 20. Последовательные сигналы между двумя процессами
- 21. Как взаимодействовать между двумя процессами
- 22. Обмен очереди результатов между несколькими процессами
- 23. ДМА обмен ЬеГо между несколькими процессами
- 24. Python обмен словаря между параллельными процессами
- 25. Обмен данными между процессами в Python
- 26. обмен информацией между процессами в бригадиром
- 27. Linux: возможно ли обмен кодами между процессами?
- 28. Обмен файлами между несколькими процессами [Perl]
- 29. Обмен глобальной переменной между разветвленными процессами
- 30. Обмен сложным объектом между процессами Python?
Я видел это решение, но похоже, что обновление данных в этом файле может быть медленным. Я очень быстро обновляю данные массива. Не будет ли обновление файла постоянно медленным? – haze
Насколько велик ваш массив и как часто вы его обновляете? –
Как правило, файл ввода/вывода кэшируется в MMF для повышения производительности системы. Обновление массива записывается в ОЗУ, а не на диск. –