- Регистрация
- 31.10.2011
- Сообщения
- 3 103
- Реакции
- 802
- Баллы
- 113
Всем привет)
ничего супер-пупер - шаблон-схема, но как-то встала у меня задача - залочить часть кубиков, для последовательного выполнения потоками именно в определённых местах шаблона.
Последовательность действий, на примере:
1. Создаём глобальную переменную shab_name , пространство имён называем "глобал".
2.устанавливаем значение по умолчанию = 0
3.Перед входом в охраняемый для последовательной работы блок кода, ставим кубик C# - назавём его "вход в охраняемую зону" , со следующим кодом:
4. По зелёной ветке с этого кубика - заходим в охраняемый от многопотока блок
3. По красной ветке с этого кубика - выходим на кубик с требуемой паузой - этот кубик с паузой можно назвать - "изолятор", и зелёную ветку с паузы бросаем обратно на "вход в охраняемую зону"
4. Все ветки выходящие из охраняемого блока пропускаем через следующий кубик C#, назовём его - "выход из охраняемой зоны":
Схема конструкции:
Шаблон прикрепил. Можно запустить в многопотоке и по логу увидеть его работу.
Успешных всем разработок!
Казалось бы - всё интуитивно просто и понятно)
!Однако, после публикации поста - подтянулись старожилы и доказали мне наглядно, что данная схема в таком виде не сработает (хотя проводя тесты - эта схема была успешной в данном виде - но как оказалось из-за совпавших обстоятельств).
Благодарен Doc и iBred за поворот головы в нужную сторону.
Выкладываю исправление:
2. В нашу глобальную переменную никакое значение не записываем - ни по-умолчанию, вообще никак - это мы сделаем внутри кубика, поскольку запись в по-умолчанию у глобальных переменных работает не очевидно.
3. перед входом в охраняемый блок ставим такой код, вместо того что ранее выкладывал:
Всё остальное оставляем как было раньше. Прикладываю исправленный шаблон, называется - охраняющий локкер правильный.
ничего супер-пупер - шаблон-схема, но как-то встала у меня задача - залочить часть кубиков, для последовательного выполнения потоками именно в определённых местах шаблона.
Последовательность действий, на примере:
1. Создаём глобальную переменную shab_name , пространство имён называем "глобал".
2.устанавливаем значение по умолчанию = 0
3.Перед входом в охраняемый для последовательной работы блок кода, ставим кубик C# - назавём его "вход в охраняемую зону" , со следующим кодом:
C#:
lock(SyncObject)] {
if(project.GlobalVariables["глобал", "shab_name"].Value==0){
project.GlobalVariables.SetVariable("глобал", "shab_name", 1);
return "зашёл 1 поток";
}
else throw new Exception();
}
4. По зелёной ветке с этого кубика - заходим в охраняемый от многопотока блок
3. По красной ветке с этого кубика - выходим на кубик с требуемой паузой - этот кубик с паузой можно назвать - "изолятор", и зелёную ветку с паузы бросаем обратно на "вход в охраняемую зону"
4. Все ветки выходящие из охраняемого блока пропускаем через следующий кубик C#, назовём его - "выход из охраняемой зоны":
Код:
lock(SyncObject) {
project.GlobalVariables.SetVariable("глобал", "shab_name", 0);
return "можно заходить другим";
}
Схема конструкции:
Шаблон прикрепил. Можно запустить в многопотоке и по логу увидеть его работу.
Успешных всем разработок!
Казалось бы - всё интуитивно просто и понятно)
!Однако, после публикации поста - подтянулись старожилы и доказали мне наглядно, что данная схема в таком виде не сработает (хотя проводя тесты - эта схема была успешной в данном виде - но как оказалось из-за совпавших обстоятельств).
Благодарен Doc и iBred за поворот головы в нужную сторону.
Выкладываю исправление:
2. В нашу глобальную переменную никакое значение не записываем - ни по-умолчанию, вообще никак - это мы сделаем внутри кубика, поскольку запись в по-умолчанию у глобальных переменных работает не очевидно.
3. перед входом в охраняемый блок ставим такой код, вместо того что ранее выкладывал:
C#:
lock(SyncObject)] {
if(project.GlobalVariables["глобал", "shab_name"].Value==null){
project.GlobalVariables.SetVariable("глобал", "shab_name", 0);
} //это и есть наша запись в переменную по-умолчанию - означаящая записать число 0, только если в этой переменной ничего нет, если уже есть - то будет пропущено
if(project.GlobalVariables["глобал", "shab_name"].Value==0){
project.GlobalVariables.SetVariable("глобал", "shab_name", 1);
return "зашёл 1 поток";
}
else throw new Exception();
}
Всё остальное оставляем как было раньше. Прикладываю исправленный шаблон, называется - охраняющий локкер правильный.
Вложения
Для запуска проектов требуется программа ZennoPoster.
Это основное приложение, предназначенное для выполнения автоматизированных шаблонов действий (ботов).
Подробнее...
Для того чтобы запустить шаблон, откройте программу ZennoPoster. Нажмите кнопку «Добавить», и выберите файл проекта, который хотите запустить.
Подробнее о том, где и как выполняется проект.
Последнее редактирование:



