Переменная разделяемая между процессами
От: igna Россия  
Дата: 28.09.09 15:43
Оценка:
Как проще всего определить разделяемую между процессами переменную?
Re: Переменная разделяемая между процессами
От: TK Лес кывт.рф
Дата: 28.09.09 16:20
Оценка: +1
Здравствуйте, igna, Вы писали:

I>Как проще всего определить разделяемую между процессами переменную?


Например, через файл. А так, все зависит от того, что за переменная, как должна быть организована работа с ней и т.п.
Если у Вас нет паранойи, то это еще не значит, что они за Вами не следят.
й
Re[2]: Переменная разделяемая между процессами
От: igna Россия  
Дата: 28.09.09 16:39
Оценка:
Здравствуйте, TK, Вы писали:

TK>Например, через файл. А так, все зависит от того, что за переменная, как должна быть организована работа с ней и т.п.


То есть ничего проще file mapping или memory mapping нет?
Re: Переменная разделяемая между процессами
От: Аноним  
Дата: 28.09.09 16:42
Оценка:
Здравствуйте, igna, Вы писали:

I>Как проще всего определить разделяемую между процессами переменную?


Мьютекс (Mutex)
Re: Переменная разделяемая между процессами
От: blblx Россия http://yegodm.blogspot.com
Дата: 29.09.09 02:00
Оценка: 3 (1) -1
Здравствуйте, igna, Вы писали:

I>Как проще всего определить разделяемую между процессами переменную?


По-моему, можно хранить значение в Registry, а Mutex-ом синхронизироваться.
El pueblo unido jamás será vencido.
Re[3]: Переменная разделяемая между процессами
От: TK Лес кывт.рф
Дата: 29.09.09 05:08
Оценка: -2
Здравствуйте, igna, Вы писали:

TK>>Например, через файл. А так, все зависит от того, что за переменная, как должна быть организована работа с ней и т.п.

I>То есть ничего проще file mapping или memory mapping нет?

Еще реестр советовали — если объем данных не велик то, это тоже не самый сложный способ.
Если у Вас нет паранойи, то это еще не значит, что они за Вами не следят.
Re[3]: Переменная разделяемая между процессами
От: _FRED_ Черногория
Дата: 29.09.09 05:08
Оценка: -1
Здравствуйте, igna, Вы писали:

TK>>Например, через файл. А так, все зависит от того, что за переменная, как должна быть организована работа с ней и т.п.


I>То есть ничего проще file mapping или memory mapping нет?


"проще всего" (как следует из первоначального вопроса) — через самый обычный файл.
Help will always be given at Hogwarts to those who ask for it.
Re[2]: Переменная разделяемая между процессами
От: TK Лес кывт.рф
Дата: 29.09.09 05:12
Оценка: :))) :)
Здравствуйте, Аноним, Вы писали:

I>>Как проще всего определить разделяемую между процессами переменную?

А>Мьютекс (Mutex)

А данные передавать морзянкой?
Если у Вас нет паранойи, то это еще не значит, что они за Вами не следят.
Re: Переменная разделяемая между процессами
От: Pavel Dvorkin Россия  
Дата: 29.09.09 06:14
Оценка: 9 (1)
Здравствуйте, igna, Вы писали:

I>Как проще всего определить разделяемую между процессами переменную?


http://rsdn.ru/forum/dotnet/3182030.1.aspx
Автор: Pavel Dvorkin
Дата: 20.11.08
With best regards
Pavel Dvorkin
Re[2]: Переменная разделяемая между процессами
От: Pavel Dvorkin Россия  
Дата: 29.09.09 06:16
Оценка: 3 (1) :)
Здравствуйте, TK, Вы писали:

TK>Здравствуйте, igna, Вы писали:


I>>Как проще всего определить разделяемую между процессами переменную?


TK>Например, через файл.


Через файл — это уже не переменная. Переменная должна в адресном пространстве обоих процессов лежать.
With best regards
Pavel Dvorkin
Re[4]: Переменная разделяемая между процессами
От: Pavel Dvorkin Россия  
Дата: 29.09.09 06:39
Оценка:
Здравствуйте, TK, Вы писали:

TK>Еще реестр советовали — если объем данных не велик то, это тоже не самый сложный способ.


Еще можно установить MS-SQL сервер и передавать через него
With best regards
Pavel Dvorkin
Re: всем
От: Pavel Dvorkin Россия  
Дата: 29.09.09 06:45
Оценка: 22 (3) +1
Уважаемые господа, не изобретайте велосипедов, потому что они давно изобретены.

Есть два понятия — переменная (область памяти), разделяемая двумя или большим числом процессов )то есть лежащая в виртуальном адресном пространстве всех процессов) и передача данных между процессами.

Для первого существуют 2 способа — memory mapped файлы и разделяемая секция в DLL. Других способов Windows не имеет, а поэтому и ничего придумать вы тут не сможете.

Для второго способов много. Файлы, сокеты, пайпы... Но это есть просто передача копии, а не разделение одной и той же переменной.
With best regards
Pavel Dvorkin
Re[2]: всем
От: igna Россия  
Дата: 29.09.09 08:35
Оценка:
Здравствуйте, Pavel Dvorkin, Вы писали:

PD>Для второго способов много. Файлы, сокеты, пайпы... Но это есть просто передача копии, а не разделение одной и той же переменной.


А если использовать Registry, это передача копии или разделение одной и той же переменной?
Re[3]: всем
От: bl-blx Россия http://yegodm.blogspot.com
Дата: 29.09.09 09:25
Оценка: +1
Здравствуйте, igna, Вы писали:

I>Здравствуйте, Pavel Dvorkin, Вы писали:


PD>>Для второго способов много. Файлы, сокеты, пайпы... Но это есть просто передача копии, а не разделение одной и той же переменной.


I>А если использовать Registry, это передача копии или разделение одной и той же переменной?


Это многократная передача копии с сохранением во внешнем хранилище (практически — в базе данных) . Так что самый эффективный способ при простых требованиях — это shared data segment, как справедливо указал Pavel Dvorkin.
El pueblo unido jamás será vencido.
Re: Переменная разделяемая между процессами
От: Воронков Василий Россия  
Дата: 29.09.09 11:45
Оценка:
Здравствуйте, igna, Вы писали:

I>Как проще всего определить разделяемую между процессами переменную?


Раньше я для таких задач использовал ремотинг с Ipc-каналом (там пайпы). Кода немного и получается вполне удобно. Опять же как-то правильнее выглядит, когда у тебя есть специальный singleton сервис, который отвечает за "междпроцессные" данные.

С регистром и проч. — возни не меньше, а бенефит в чем?
Вариант с сервисом и расширять будет легче, если вдруг потребуется другие данные передавать между процессами или данные с более сложной структурой (коллекции, деревья).
Re[3]: Переменная разделяемая между процессами
От: Воронков Василий Россия  
Дата: 29.09.09 11:48
Оценка: 3 (1)
Здравствуйте, igna, Вы писали:

I>То есть ничего проще file mapping или memory mapping нет?


Есть, если использовать готовую инфраструктуру поверх той же шаред мем — как, например, ремотинг.
Re[3]: всем
От: TK Лес кывт.рф
Дата: 29.09.09 11:54
Оценка:
Здравствуйте, igna, Вы писали:

I>А если использовать Registry, это передача копии или разделение одной и той же переменной?


Зависит от того, насколько вы умеете "абстрагироваться" от проблемы.
Если у Вас нет паранойи, то это еще не значит, что они за Вами не следят.
Re[5]: Переменная разделяемая между процессами
От: TK Лес кывт.рф
Дата: 29.09.09 11:57
Оценка: :)
Здравствуйте, Pavel Dvorkin, Вы писали:

TK>>Еще реестр советовали — если объем данных не велик то, это тоже не самый сложный способ.

PD>Еще можно установить MS-SQL сервер и передавать через него

Многие БД ориентированные приложения именно так и делают зачем изобретать велосипед если уже есть открытый connection к базе данных?
Если у Вас нет паранойи, то это еще не значит, что они за Вами не следят.
Re[3]: Переменная разделяемая между процессами
От: TK Лес кывт.рф
Дата: 29.09.09 12:13
Оценка:
Здравствуйте, Pavel Dvorkin, Вы писали:

PD>Через файл — это уже не переменная. Переменная должна в адресном пространстве обоих процессов лежать.


Переменные в C# лежат на стеке

А вот переменные данные, могут вообще существовать сами по себе и вообще без процесса. для того, что-бы разделять их между процессами доводить все до маразма совершенно не обявательно.
Если у Вас нет паранойи, то это еще не значит, что они за Вами не следят.
Re[2]: Переменная разделяемая между процессами
От: bl-blx Россия http://yegodm.blogspot.com
Дата: 29.09.09 14:55
Оценка:
Здравствуйте, Воронков Василий, Вы писали:

ВВ>С регистром и проч. — возни не меньше, а бенефит в чем?


Бенефит в простоте (Microsoft.Win32.Registry.SetValue()/GetValue()) и больше, наверное, ни в чем. Если только персистентность не требуется, или, например, доступ к переменной из не-дотнетовских процессов.
El pueblo unido jamás será vencido.
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.