У меня есть приложение Delphi 2006, которое собирает данные и отображает его как сводку по многим каналам, по одному каналу в строке на TDrawGrid. У меня такое же приложение работает на других ПК в сети, но эти другие ПК являются подчиненными - они не собирают данные, а просто предоставляют удаленное отображение сводки.Совместное использование общей области памяти в Delphi между ПК
В настоящее время ведомые устройства просто показывают мимику суммарного экрана дисплея на главном устройстве, и это реализовано посредством широковещательных рассылок через почтовые ящики от ведущего устройства.
Я хочу реализовать это по-другому, чтобы уменьшить нагрузку на мастер и предоставить подчиненным устройствам немного большую гибкость и независимость от того, как они интерпретируют данные. Кроме того, у меня возникают проблемы с широковещательной рассылкой данных в разных подсетях.
Могу ли я использовать некоторую схему общей памяти для переноса данных в файл с отображением памяти, где подчиненные устройства могут иметь доступ из любого места (через Интернет, даже)? Мы говорим о размере памяти размером 100 тыс. Байт, скажем, обновляемом мастером примерно один раз в секунду, возможно, в потоке, чтобы задача мастера переднего плана была отзывчивой.
Не могли ли стандартные механизмы доступа к файлам Windows предотвращать грязные чтения? Иногда раб не мог получить данные, но это не было бы реальной проблемой. Грязные чтения не имеют значения, поскольку они будут заменены на следующем опросе мастера в любом случае. Предположительно, чтение и запись кэширования диска в главном случае означало бы, что большинство обращений к файлу было бы прочитано или записано в память в любом случае? – rossmcm
@ user89691: Это зависит от того, как открывается файл и используются ли какие-либо механизмы блокировки. Самый простой способ заключается в том, чтобы мастер открыл файл write/allow read и ведомые пользователи readonly/allow read/write. Но это позволит грязным чтениям. Другие открытые флаги могут предотвращать грязные чтения, но тогда обе стороны должны обрабатывать ошибки, связанные с доступом. – dummzeuch
Что же такое грязное чтение? Вы говорите, что если мастер находился в процессе обновления файла «write/allow read», а ведомое устройство читало его, ведомое устройство могло бы получить половину старых данных и половину новых данных? Я думал, что операционная система хотя бы записывает запись как атомную. Если это не так, будет ли подходящий механизм блокировки открыть файл как «Write/deny read», обновить данные, закрыть файл (и заставить подчиненный справиться со временем, когда он coudlnt получит данные)? – rossmcm