- Регистрация
- 31.10.2011
- Сообщения
- 2 994
- Благодарностей
- 787
- Баллы
- 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();
}
Вложения
-
24,3 КБ Просмотры: 263
-
24,4 КБ Просмотры: 337
Для запуска проектов требуется программа ZennoPoster.
Это основное приложение, предназначенное для выполнения автоматизированных шаблонов действий (ботов).
Подробнее...
Для того чтобы запустить шаблон, откройте программу ZennoPoster. Нажмите кнопку «Добавить», и выберите файл проекта, который хотите запустить.
Подробнее о том, где и как выполняется проект.
Последнее редактирование: