Что нового

Коммуникация скриптов: ini или не ini?

Kalisnik

Эволюция
Сообщения
295
Репутация
63
Я уже спрашивал каковы могут быть последствия если два скрипта обратятся к одному ini с записью одновременно. И как я понял, такой вариант не гарантирует стабильности. А последствия не определнны с перевесом в худшую сторону. Видимо вариант когда один скрипт обращается с чтением ini значения, а другой одновременно с записью этого значения тоже не обнадеживает? Но как тогда организовать коммуникацию? Последовательно? - довольно не удобно придется усложнять код скриптов. Может подскажите какой-нибудь более просветленный способ? Например, реестр? - но как я читал на этом форуме, если конечно я правильно понял, имеет свойство замедлять работу скрипта. Да и те же проблемы, наверно, что и с ini?
А как на счет STDIN/STDOUT потоков?
Мне необходимо реализовать плотную коммуникацию трех скриптов, причем заранее не известно когда будет высылка значения одним скриптом, и когда будет чтение этого значения другим - основную работу выполняют первые два скрипта, а третий является коммутатором и управляет совместной работой первых двух. Поэтому не должно возникать конфликтов, когда два скрипта полезут в одну "сумку". Это возможно? :-\

Спасибо!
 

Belfigor

Модератор
Локальный модератор
Сообщения
3,608
Репутация
941
Я решал эту проблему через память процесса :smile:
 
Автор
K

Kalisnik

Эволюция
Сообщения
295
Репутация
63
Belfigor
ммм... а как это реализовать? Можно малюсенький примерчик? :smile:
 

Yashied

Модератор
Команда форума
Глобальный модератор
Сообщения
5,379
Репутация
2,724
Тут вариантов вагон и маленькая тележка. Все зависит от конкретных задач. Если тебе нужно общее хранилище данных, то подойдет и через файл. Доступ регулируется правами доступа к этому файлу, которые ты задаешь при его открытии. Еще можно разрулить совместное использование с помощью семафоров. Вот простой пример.

Код:
#Include <WinAPIEx.au3>

$hSemaphore = _WinAPI_CreateSemaphore('MySemaphore', 1, 1)
_WinAPI_WaitForSingleObject($hSemaphore)
MsgBox(0, ':-)', 'Hello!')
_WinAPI_ReleaseSemaphore($hSemaphore)
_WinAPI_CloseHandle($hSemaphore)


Запусти этот код несколько раз. Более одного сообщения на экране не появится. Каждый следующий скрипт будет ждать, пока предыдущий не освободит хендл ($hSemaphore).

Через реестр, это IMHO некашерно.

Если нужна именно коммуникация процессов, то тут еще больше вариантов. Обычно используют сообщение WM_COPYDATA, но есть и другие способы (более муторные). У меня даже на эту тему есть UDF.

Messages.au3

Есть еще прикольная UDF (в аттаче). Предлагаю тебе самому в ней разобраться, благо код очень маленький, и имеется описание (на английском).

Вообщем, тебе нужно четко представлять, что будет делать каждый из процессов.

;)
 

Belfigor

Модератор
Локальный модератор
Сообщения
3,608
Репутация
941
Kalisnik сказал(а):
Belfigor
ммм... а как это реализовать? Можно малюсенький примерчик? :smile:
Да примера не осталось, на старом ноутбуке оно было. Суть в том что я создавал процесс, с помощью NomadMemmory.au3 размечал в нем ячейки памяти, выдавал несколько ячеек для каждого скрипта и сколько необходимо ячеек для хранения инфы. При старте скрипт хранящий в себе все эти данные размечал в себе все это, раздавал информацию о том что где лежит и куда писать другим скриптам. У каждого скрипта три свои ячейки в памяти этого процесса, в одну скрипт заносит инфу о том куда после окончания записи поместить информацию, в другую саму информацию, в третью после окончания записи в первые две скрипт помещает временной указатель для хранилища, чтобы оно определило что инфа обновилась, как только хранилище забирает инфу из ячеек скрипта, указатель обнуляется что символизирует то, что ячейки можно снова заполнять. Каждый скрипт непрерывно пишет в свои три ячейки, хранилище расталкивает всю инфу по полочкам откудова потом эти же скрипты ее и собирают для личного использования. Работало очень быстрои безотказно. По крайней мере для моих целей хватало за глаза :smile:


Добавлено:
Сообщение автоматически объединено:

Почитай номадмемори, там достаточно подробно описаны все функции.
 
Автор
K

Kalisnik

Эволюция
Сообщения
295
Репутация
63
Yashied
Belfigor

Ну вот.. )) Теперь буду паровозик собирать дня два... поскльку подумать я люблю. ;D Вспомню беззаботные, счастливые детские годы около конструктора LEGO... Эх! )))
Да будет всегда правая рельса, параллельна левой! Спасибо всем на добром слове! :smile:
 
Верх