Сниппет с# - обрубатель вашего кода по таймеру

arhip1985

Client
Регистрация
31.10.2011
Сообщения
2 952
Благодарностей
780
Баллы
113
Часто возникала такая ситуация - что надо обрубить код - по таймеру.
Накидал кусок, вроде отрабатывает, но если есть кому что добавить - давайте доработаем под лучшее решение.
Код:
C#:
var doing = new ParameterizedThreadStart(vbn =>  {
        //тут надо разместить Ваш код который необходимо обрывать по времени
        
    });

Thread myThread = new Thread(doing);
myThread.Start(instance); // запускаем поток с Вашим кодом внутри открытого потока, который надо будет позже прервать, передаём потоку наш главный инстанс (может и не надо передавать, но так работает)
Thread.Sleep(Convert.ToInt32(project.Variables["time"].Value)*1000); // главный поток, который ждёт указанное время в переменной time (в секундах)

myThread.Abort();  //прошло время time в секундах и закрываем поток с вашим кодом
 

phirelli

Client
Регистрация
11.09.2016
Сообщения
34
Благодарностей
6
Баллы
8
Спасибо за код! А подскажите пожалуйста, как задействовать многопоточность при выполнении шаблона 1 раз, это нужно в определённой области кода сделать, или может как то с помощью кода можно управлять потоками? Мне просто нужно запустить часть кода только один раз для получения определённых данных и уже после этого запускать всё в многопотоке, а так получается что бы пользоваться многопоточностью нужно один и тот же шаблон запускать столько раз сколько потоков, а мне такой вариант не подходит.
 

arhip1985

Client
Регистрация
31.10.2011
Сообщения
2 952
Благодарностей
780
Баллы
113
если надо залочить в коде, то
Код:
lock(SyncObject)
{
тут код, который надо залочить
}
 

phirelli

Client
Регистрация
11.09.2016
Сообщения
34
Благодарностей
6
Баллы
8
если надо залочить в коде, то
Код:
lock(SyncObject)
{
тут код, который надо залочить
}
Этот код я знаю спасибо, он всего лишь лочит поток, но при этом код естественно всё равно будет выполняться столько, сколько выбрано выполнять проект раз. У меня другая проблема, насколько мне известно для того что бы пользоваться многопоточностью в ZP нужно запускать шаблон столько раз сколько потоков нужно, но мне это не подходит, так как у меня в начальной части кода считываются определённые параметры и условия а потом уже после получения этих параметров, выполняется в цикле уже по заданным условиям не обходимое количество раз, и допустим сколько у меня модемных проксей столько потоков параллельно и должно выполнятся, в одном цикле и при одном количестве <Сколько делать> получается всё как нужно, только естественно на 1 потоке, может есть возможность как то запустить остальные потоки уже дальше в коде, знаю что в чистом C# это точно можно сделать, там для этого не нужно запускать например для 10 потоков 10 заданий для шаблона, вот я уже неделю ломаю голову как так всё сделать что бы допустим или определённая часть кода которая вначале, считалась только 1 раз при старте и не зависимо сколько заданий и потоков выбрано, и данные соответственно которые будут получены, например количество ссылок, уже использовались дальше в коде там где уже нужна многопоточность, или потоки просто активировать там где нужно, но как я понимаю зенка этого не позволяет, думал может шаблон в шаблоне но это вызывает путаницу не меньше. Может вы знаете какое то адекватное решение?
 

arhip1985

Client
Регистрация
31.10.2011
Сообщения
2 952
Благодарностей
780
Баллы
113
решение - запускать сразу 10 потоков - но в начале пропускать по 1 - и пока первый не выйдет - остальные не пускать, и там сделать чек - если первый вышел - то остальные переходят мимо захода туда где должен был делать только 1ый поток, оргинизовать это - как у Вас фантазия позволяет
 
  • Спасибо
Реакции: phirelli

phirelli

Client
Регистрация
11.09.2016
Сообщения
34
Благодарностей
6
Баллы
8
решение - запускать сразу 10 потоков - но в начале пропускать по 1 - и пока первый не выйдет - остальные не пускать, и там сделать чек - если первый вышел - то остальные переходят мимо захода туда где должен был делать только 1ый поток, оргинизовать это - как у Вас фантазия позволяет
Спасибо за решение, попробую и потом отпишусь. А скажите разве можно запустить много потоков при 1 запуске "Сколько делать" у проекта?
 

Вложения

arhip1985

Client
Регистрация
31.10.2011
Сообщения
2 952
Благодарностей
780
Баллы
113
так задумано - что потоков не запустится больше - чем в поле - сколько делать
 
  • Спасибо
Реакции: phirelli

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