Запуск экшенов по времени

Salat

Client
Регистрация
15.01.2022
Сообщения
43
Благодарностей
1
Баллы
8
Здравствуйте. Задача такая. В проекте 10 блоков с экшенами. Первый блок запускается в 7.00. в 7.03-05 исполняется. Необходимо чтобы второй блок в этом проекте запускался ровно в 8.00 и так по аналогии 10 раз. Заранее спасибо за помощь)
 

Salat

Client
Регистрация
15.01.2022
Сообщения
43
Благодарностей
1
Баллы
8
Просто ставить паузы не подходит, так как время исполнения блока всегда разное, и время начинает смещаться
 

radv

Client
Регистрация
11.05.2015
Сообщения
3 718
Благодарностей
1 913
Баллы
113
Как вариант можно разделить на разные проекты и использовать планировщик в зеннопостер. или получать текущее время перед запуском и сранивать с нужным, если подходит, то запускать . или высчитывать паузу между текущим временем и нужным, и тогда делать повторную проверку и запуск.

Работа с датой и временем в Zennoposter с использованием методов C#
 

Alexmd

Client
Регистрация
10.12.2018
Сообщения
1 021
Благодарностей
1 389
Баллы
113
C#:
var startHour = int.Parse(project.Variables["startHour"].Value);
while(DateTime.Now.Hour < startHour)
{

    Thread.Sleep(1000);
}
project.SendInfoToLog($"Наступило время запуска следующего блока кода", true);
project.Variables["startHour"].Value = (startHour==23?0:startHour+1).ToString();
Перед каждым блоком вставить это в кубик "Свой код С#"
В переменной проекта "startHour" должен быть час, на который планируется запуск кубика. Например, 7.
 
  • Спасибо
Реакции: Salat

doc

Client
Регистрация
30.03.2012
Сообщения
8 614
Благодарностей
4 604
Баллы
113
делал такое недавно

C#:
var t = TimeSpan.Parse("09:36:57");

var start_time = DateTime.Today.AddSeconds(t.TotalSeconds);
int pause = (int)start_time.Subtract(DateTime.Now).TotalMilliseconds;

if (pause > 0)
{
    project.SendToLog("Текущее время меньше указанного. Будем ждать "+pause.ToString()+" мс до наступления даты " + start_time.ToString(), ZennoLab.InterfacesLibrary.Enums.Log.LogType.Info, true, ZennoLab.InterfacesLibrary.Enums.Log.LogColor.Gray);
    Thread.Sleep(pause);
    project.SendToLog("Пауза окончена", ZennoLab.InterfacesLibrary.Enums.Log.LogType.Info, true, ZennoLab.InterfacesLibrary.Enums.Log.LogColor.Gray);
    return 0;
}

project.SendToLog("Текущее время больше указанного. Работаем без паузы", ZennoLab.InterfacesLibrary.Enums.Log.LogType.Info, true, ZennoLab.InterfacesLibrary.Enums.Log.LogColor.Gray);
 
  • Спасибо
Реакции: Salat

Deisler

Client
Регистрация
26.10.2019
Сообщения
483
Благодарностей
185
Баллы
43
Я бы не ставил поток на паузу, т.к. он час будет висеть и давать ненужную нагрузку на сервер. Я бы настроил расписание запуска по времени в самом зенгнопостере, а в проекте бы через свитч или if-ы развел бы в какой блок мы идем в какое время. Таким образом поток не висит и не занимает ресурсы без дела.

Если принципиально что бы шаблон уже начал выполняться в 8:00 секунда в секунду, то в расписании нужно стартонуть на минуту раньше, что бы проект успел запуститься, и встать на паузу кодом, который предложили выше
 
  • Спасибо
Реакции: Salat

Salat

Client
Регистрация
15.01.2022
Сообщения
43
Благодарностей
1
Баллы
8
C#:
var startHour = int.Parse(project.Variables["startHour"].Value);
while(DateTime.Now.Hour < startHour)
{

    Thread.Sleep(1000);
}
project.SendInfoToLog($"Наступило время запуска следующего блока кода", true);
project.Variables["startHour"].Value = (startHour==23?0:startHour+1).ToString();
Перед каждым блоком вставить это в кубик "Свой код С#"
В переменной проекта "startHour" должен быть час, на который планируется запуск кубика. Например, 7.
Благодарю, тестирую этот вариант
 

Кто просматривает тему: (Всего: 1, Пользователи: 0, Гости: 1)