- Регистрация
- 23.03.2021
- Сообщения
- 87
- Благодарностей
- 7
- Баллы
- 8
Всем привет
пробую сделать отложенный запуск потоков
У меня почти верно получилось, но! 1й поток стартует в любом случае, в второй ждем запуска положенное количество времени
как мне сделать, чтобы оба потока ждали запуска столько сколько им необходимо?
задания берутся из разных строк таблицы
1й поток например старт должен быть через 3 минуты от текущего времени
2й поток - через 7 минут
и тд
данный код у меня находится в отдельном кубике
логика работы шаблона во втором кубике
код сделал по мотивам тем на форуме:
пробую сделать отложенный запуск потоков
У меня почти верно получилось, но! 1й поток стартует в любом случае, в второй ждем запуска положенное количество времени
как мне сделать, чтобы оба потока ждали запуска столько сколько им необходимо?
задания берутся из разных строк таблицы
1й поток например старт должен быть через 3 минуты от текущего времени
2й поток - через 7 минут
и тд
данный код у меня находится в отдельном кубике
логика работы шаблона во втором кубике
код сделал по мотивам тем на форуме:
C#:
int timeOut; //время задержки
DateTime jobDate;
DateTime jobTimeStart;
DateTime ProfTimeExit;
project.SendInfoToLog("1",true);
lock(SyncObject) {
project.SendInfoToLog("1_1",true);
var gbVar = project.GlobalVariables["MyNameSpace", "Counter"];
project.SendInfoToLog("1_2",true);
gbVar.Value = Convert.ToInt32(gbVar.Value.ToString())+1;
project.SendInfoToLog("1_3",true);
project.Variables["rowNumber"].Value = gbVar.Value.ToString();
}
project.SendInfoToLog("2",true);
//var id = Guid.Parse(project.TaskId);
//ZennoPoster.AddTries(id, 1);
lock(SyncObjects.TableSyncer){
IZennoTable ProfTasks = project.GoogleSpreadsheets["ProfTasks"];
string ProfTask = project.Variables["ProfTask"].Value;
ProfTask = ProfTasks.GetCell("H",Convert.ToInt32(project.Variables["rowNumber"].Value));
project.SendInfoToLog("Тип задания - " + ProfTask,true);
jobDate = DateTime.ParseExact(ProfTasks.GetCell("I",Convert.ToInt32(project.Variables["rowNumber"].Value)), "dd.MM.yyyy", CultureInfo.CreateSpecificCulture("ru-RU"));
project.SendInfoToLog("Дата работы с заданием - " + jobDate.ToString("dd.MM.yyyy"),true);
jobTimeStart = DateTime.ParseExact(ProfTasks.GetCell("J",Convert.ToInt32(project.Variables["rowNumber"].Value)), "H:mm:ss",CultureInfo.CreateSpecificCulture("ru-RU"));
project.SendInfoToLog("Время старта работы с заданием - " + jobTimeStart.ToString("H:mm:ss"),true);
ProfTimeExit = DateTime.ParseExact(ProfTasks.GetCell("K",Convert.ToInt32(project.Variables["rowNumber"].Value)), "H:mm:ss",CultureInfo.CreateSpecificCulture("ru-RU"));
project.SendInfoToLog("Время окончания работы с заданием - " + ProfTimeExit.ToString("H:mm:ss"),true);
project.SendInfoToLog("rowNumber - " + project.Variables["rowNumber"].Value,true);
}
DateTime timeNow = DateTime.Now; //начальная дата
TimeSpan timeDiff = jobTimeStart.Subtract(DateTime.Now);
timeOut = (int)Math.Floor(timeDiff.TotalMilliseconds); //задержка
project.SendInfoToLog("timeOut - " + timeDiff.TotalSeconds + " сек.",true);
lock(SyncObjects.InputSyncer){
try{
var tickCount = project.GlobalVariables["MyNameSpace", "TickCount"];
if(tickCount.Value.ToString() == string.Empty){
project.GlobalVariables.SetVariable("MyNameSpace", "TickCount", Environment.TickCount);
return "ok ---";
}
if(tickCount.Value + timeOut * 1000 > Environment.TickCount){
project.SendInfoToLog("Поток с Id -" + Thread.CurrentThread.ManagedThreadId.ToString() + " будет ожидать запуска: " + timeOut + " мсек.",true);
System.Threading.Thread.Sleep(timeOut);
project.GlobalVariables.SetVariable("MyNameSpace", "TickCount", Environment.TickCount);
}else{
project.SendInfoToLog("Запускаем работу потока Id - " + Thread.CurrentThread.ManagedThreadId.ToString() + " т.к. время старта задания меньше текущего.",true);
}
}catch(KeyNotFoundException ex){
project.GlobalVariables.SetVariable("MyNameSpace", "TickCount", Environment.TickCount);
}
}