Вверх ↑
Этот топик читают: Гость
Ответов: 177
Рейтинг: 24
#1: 2015-01-08 13:07:39 ЛС | профиль | цитата
Возник вот какой вопросик. Три программки одновременно работающие на одном компьютере должны сверятся с общими данными и вносить коррективы в данные по мере необходимости. Использование текстового файла очень тормозит. Как выделить участок в памяти для данных для совместного использования???

карма: 1

0
Ответов: 1343
Рейтинг: 31
#2: 2015-01-08 13:16:56 ЛС | профиль | цитата
Lora писал(а):
Как выделить участок в памяти для данных


AllocateMemory, компонент MemPatch, выделяет нужный размер памяти в байтах в любом приложении и выдаёт указатель на выделенную область памяти.
для чтения используется простой ReadProcessMemory в том же компоненте.
для записи использовать WriteProcessMemory.

весь процесс записи чтения, думаю занимает не более 100 мкс
карма: 2

0
Ответов: 824
Рейтинг: 138
#3: 2015-01-08 13:33:42 ЛС | профиль | цитата
Lora, Используйте компонент SharedStream, с помощью него можно организовать доступ нескольких программ к участку памяти.
Я, лично, использую более простую (легкую в использовании) реализацию - SharedVar от Aziz
по секрету...
Сам толком не разобрался с SharedStream, поэтому юзаю SharedVar
карма: 1

0
Ответов: 177
Рейтинг: 24
#4: 2015-01-08 15:15:51 ЛС | профиль | цитата
Спасибо, мальчики! Всё получилось!!!
карма: 1

0
Ответов: 9906
Рейтинг: 351
#5: 2015-01-08 15:44:59 ЛС | профиль | цитата
sashaoli писал(а):
Сам толком не разобрался с SharedStream

nesco, а ведь я тебя предупреждал
карма: 9

0
Ответов: 824
Рейтинг: 138
#6: 2015-01-08 18:31:03 ЛС | профиль | цитата
[flood]Скажу так - у компонента SharedStream недостаточное, "сухое", неполное описание (ет токмо мое мнение). А эксперименты делать не хотелось, что бы разобраться что да как...[/flood]
карма: 1

0
Разработчик
Ответов: 26163
Рейтинг: 2127
#7: 2015-01-08 19:01:41 ЛС | профиль | цитата
Galkov писал(а):
а ведь я тебя предупреждал

Че-то не помню. Ткни, где это было.

sashaoli писал(а):
Сам толком не разобрался с SharedStream

А справка с примерами читана была Там есть очень простой пример для обмена между разными копиями одной программы. Это для файловых операций -- там, да, надо понимать, что делать, но примеры-то есть, можно и разобраться
карма: 22

0
Ответов: 824
Рейтинг: 138
#8: 2015-01-08 19:34:37 ЛС | профиль | цитата
Мне просто было лень, на тот момент, вникать в особенности работы компонента.
[flood]Справка читана!
nesco писал(а):
можно и разобраться
Не спорю, можно, и разберусь - когда то... А вот SharedVar проще юзать - разбираться почти не надо... [/flood]


карма: 1

0
Ответов: 2059
Рейтинг: 132
#9: 2015-01-09 04:27:19 ЛС | профиль | цитата
Один компонент, ничуть не сложнее другого. Просто патроны разного калибра.
Всё дело в обстоятельствах.
Зачем из пушки палить по воробьям? Но и руками землю рыть не надо, когда есть лопата.
карма: 6

0
Ответов: 9906
Рейтинг: 351
#10: 2015-01-12 08:25:57 ЛС | профиль | цитата
nesco писал(а):
Ткни, где это было

ЩАЗ

Вот чего помню: диспут у нас был. Про то, что проектирование элемента надо начинать с "простоты использования".
Это я так говорил. А ты огорчался и не хотел

В данном конкретном случае - пользователь заказывает "окно" (параметрами Offset и Size) в неком файле.
И ВСЕ -- он получает стрим именно заявленного размера, и байты в этом стриме соответствуют именно заявленному смещению.
А не такому, "какое получится".

Тогда бы "ниасилил" можно было БЫ тупо оставлять без внимания - ну не дано, видимо, это данному пользователю.
А сегодня разве так
Вовсе нет. Вот я таки чего то в этом понимаю... И без пол-литры -- затруднительно было. Да и то - не все понял.
Этим невозможно пользоваться без заглядывания в егонные коды.
Ну вот нафига, спрашивается, мне (как пользователю элемента) врезать в свои алгоритмы расчета смещения и размера (для задания в элемент) еще и знание про гранулярность и размер страницы. Или не до конца понятный Mode...

nesco, ты пойми, логика должна быть повернута в противоположную сторону (т.е. - в правильную, а не так, как у нас).
С негодованием должно отвергаться "докажи что реализация более простого интерфейса возможна"
Но обязательно требовать доказательства, что "реализация более простого интерфейса - невозможна"
карма: 9

0
Разработчик
Ответов: 26163
Рейтинг: 2127
#11: 2015-01-12 09:45:16 ЛС | профиль | цитата
Galkov писал(а):
Про то, что проектирование элемента надо начинать с "простоты использования"

Да черт его сейчас знает, может и имело смысл разделить этот элемент на разные части, да и интерфейс построить по-другому, но я его тогда именно так видел, другое на ум не приходило А че ты сам не предложил более простой интерфейс?
карма: 22

0
Ответов: 9906
Рейтинг: 351
#12: 2015-01-12 10:04:08 ЛС | профиль | цитата
Как же не предлагал... Еще как предлагал
А теперь то чего... Обратная совместимость, и прочие "песни о главном"
карма: 9

0
Разработчик
Ответов: 26163
Рейтинг: 2127
#13: 2015-01-12 11:02:09 ЛС | профиль | цитата
Galkov писал(а):
Обратная совместимость, и прочие "песни о главном"

Я не думаю, что этот компонент очень часто используют. В крайнем случае, ему можно придумать другое имя, а текущий компонент просто скрыть. Последний вариант более предпочтителен, тк таких компонентов у нас далеко не один.
карма: 22

0
Ответов: 9906
Рейтинг: 351
#14: 2015-01-12 19:35:46 ЛС | профиль | цитата
Ну хорошо.
Давай тогда всерьез обсудим вышеозначенную постановку:
Пользователь заказывает "окно" (параметрами Offset и Size) в неком файле.
И ВСЕ -- он получает стрим ИМЕННО заявленного размера, и байты в этом стриме соответствуют ИМЕННО заявленному смещению.
Даже если пользовательское "окно" выходит за размеры файла
Грубо говоря, если свойства PageMem и Mode канут в лету -- то будет всем счастье.
Ибо: лучшее средство от перхоти - гильотина


Вот... Разве это не исполнимо
карма: 9

0
Разработчик
Ответов: 4698
Рейтинг: 426
#15: 2015-01-12 20:19:52 ЛС | профиль | цитата
Galkov писал(а):
Пользователь заказывает "окно" (параметрами Offset и Size) в неком файле.
И ВСЕ -- он получает стрим ИМЕННО заявленного размера, и байты в этом стриме соответствуют ИМЕННО заявленному смещению.
Даже если пользовательское "окно" выходит за размеры файла

Что-то сложно как то.
Предлагаю такое:
1. Делаем из SharedStream менеджер SharedHeap, убираем все точки и свойства. Пусть он будет иметь свойство "Имя области общей памяти" (которая для удобства будет еще и именем шареного файла) и... (TODO: подумать, что еще может пригодиться. Из кандидатов: максимальный размер выделяемой шареной области. Но пока о концепте). И все.
2. Делаем компонент SharedMemory, который по сути является тем же самым Memory, только со свойством-указателем на менеджера SharedHeap и именем этой шареной переменной.
3. И компонент SharedStream подобный SharedMemory, в котором будет храниться расшаренный поток любых байт (т.к. крайне сложно будет его обыграть через SharedMemory).

Для пользователя все очень просто: кидаем на схему SharedHeap, обзываем и тыкаем сколько хотим SharedMemory.
В плане реализации, конечно, придется попотеть. Но не потому ли интересно программистом быть, чтобы решать такие задачки?
карма: 10
0
Сообщение
...
Прикрепленные файлы
(файлы не залиты)