В многопотоке поставить задачу исключительно одному потоку

Mikhail B.

Client
Joined
Dec 23, 2014
Messages
14,453
Reaction score
5,473
Points
113

Обращаем Ваше внимание на то, что данный пользователь заблокирован.
Не рекомендуем проводить с Mikhail B. какие-либо сделки.

Если ты правильно меня понял, то такая заготовка была бы тепло встречена на конкурсе. Многие бы хотели иметь возможность не терять данные из переменных при вынужденном прерывании шаблона. Такое вроде было в планах у самих разработчиков, вроде вызывать Bad_end при прерывании. Но я давно не отслеживал этот момент.
Вот именно. @RoyalBank не знаю почему ты скромничаешь, если ты действительно готов поделится в рамках конкурса и тебя останавливает только скромность, то это похвально конечно. Но хвала будет в разы больше если этим чудесным методом поделишься с сообществом))
 

tatarin

Client
Joined
Oct 28, 2012
Messages
882
Reaction score
143
Points
43
Нужно в зенку запилить функцию запуска шаблона, после выполнения какого-либо условия! Например, ставишь 100 выполнений, и добавляешь условие, что после того как выполниться, запустить шаблон(проект определенный)! Например, 3 запуска завершились с ошибкой, запускаем шаблон(проект определенный)! Например, выполнилось 10 успешный заданий, запускаем шаблон(проект определенный)! Я так вижу эту функцию, очень удобно! Прикольная функция кстати была бы! Хочешь например получить сообщение в телегу после того как выполнилось 100 успешных, пожалуйста!
 

ssXXXss

Client
Joined
Dec 23, 2014
Messages
7,374
Reaction score
2,042
Points
113
Нужно в зенку запилить функцию запуска шаблона, после выполнения какого-либо условия! Например, ставишь 100 выполнений, и добавляешь условие, что после того как выполниться, запустить шаблон(проект определенный)! Например, 3 запуска завершились с ошибкой, запускаем шаблон(проект определенный)! Например, выполнилось 10 успешный заданий, запускаем шаблон(проект определенный)! Я так вижу эту функцию, очень удобно! Прикольная функция кстати была бы! Хочешь например получить сообщение в телегу после того как выполнилось 100 успешных, пожалуйста!
а что стоит вывести поток отдельный в шаблоне и пусть он в цикле вечно крутится и проверяет сколько успешных, а там уже делай действия какие надо
 

Phoenix78

Client
Read only
Joined
Nov 6, 2018
Messages
11,789
Reaction score
5,729
Points
113
Нужно в зенку запилить функцию запуска шаблона, после выполнения какого-либо условия! Например, ставишь 100 выполнений, и добавляешь условие, что после того как выполниться, запустить шаблон(проект определенный)! Например, 3 запуска завершились с ошибкой, запускаем шаблон(проект определенный)! Например, выполнилось 10 успешный заданий, запускаем шаблон(проект определенный)! Я так вижу эту функцию, очень удобно! Прикольная функция кстати была бы! Хочешь например получить сообщение в телегу после того как выполнилось 100 успешных, пожалуйста!
а кто будет определять что задание выполнилось успешно ? может оно не выполнило поставленную задачу и просто вышел шаблон.
 

ssXXXss

Client
Joined
Dec 23, 2014
Messages
7,374
Reaction score
2,042
Points
113
а кто будет определять что задание выполнилось успешно ? может оно не выполнило поставленную задачу и просто вышел шаблон.
китайцы ))
 

Phoenix78

Client
Read only
Joined
Nov 6, 2018
Messages
11,789
Reaction score
5,729
Points
113
а что стоит вывести поток отдельный в шаблоне и пусть он в цикле вечно крутится и проверяет сколько успешных, а там уже делай действия какие надо
это же делать надо....
 

ssXXXss

Client
Joined
Dec 23, 2014
Messages
7,374
Reaction score
2,042
Points
113

RoyalBank

Client
Joined
Sep 7, 2015
Messages
557
Reaction score
553
Points
93
не знаю почему ты скромничаешь, если ты действительно готов поделится
Я не скромничаю, мои познания в C# на уровне написания шаблонов в ZP. Что касается поделиться, то у меня нет готового решения. Но если я все правильно понял, то имхо, его можно сделать. Если сделаю, то выложу. Не вижу смысла ждать чего-то для этого, там простая обертка с проверкой, строк 20-30 от силы.
 

ssXXXss

Client
Joined
Dec 23, 2014
Messages
7,374
Reaction score
2,042
Points
113
Я не скромничаю, мои познания в C# на уровне написания шаблонов в ZP. Что касается поделиться, то у меня нет готового решения. Но если я все правильно понял, то имхо, его можно сделать. Если сделаю, то выложу. Не вижу смысла ждать чего-то для этого, там простая обертка с проверкой, строк 20-30 от силы.
тебе так кажется всё просто, один запросил одну проверку, например её сделали, это ведь ни 5 минут вставить в проект зенолаба для разработчиков как нам , тем более у всех разные хотения

P.S. напиши под себя просто либу или класс и все проблемы решены
 

RoyalBank

Client
Joined
Sep 7, 2015
Messages
557
Reaction score
553
Points
93
P.S. напиши под себя просто либу или класс и все проблемы решены
Ты меня неправильно понял, собственно, написать класс и была просьба выше (обертку для кода на скрине).

Что касается внедрений и плюшек, то я лично, отвечал в этой теме, чтобы попытаться закрыть потребность, чтобы её не пришлось реализовывать разрабам. Т.к. это все можно сделать в общем коде, нужно только объяснить, как это использовать.

В общем, логика, если просят что-то разрабов, то не потому что это критически важно, а потому что не знаю, как реализовать иначе. Если дать готовое решение, то отпадет потребность.
 
  • Thank you
Reactions: Mikhail B.

RoyalBank

Client
Joined
Sep 7, 2015
Messages
557
Reaction score
553
Points
93
или ты смог прикрутить её вызов из любой точки шаба?
Если кто поможет допилить, буду признателен. Хотя не исключаю, что логика построенного конструкта вообще не годится для поставленной задачи... Собственно нужно правильно прописать остановку всего кода.

C#:
static TaskCompletionSource<bool> tcs = new TaskCompletionSource<bool>();
        
        public static async void Main(IZennoPosterProjectModel project) {
              await Task.Run(()=>St(project).Wait());
        }
        
        public static async Task St(IZennoPosterProjectModel project)
        {
            var task = stopTask(project);
            project.SendInfoToLog("Started");
            lock(SyncObject)
            {
                while (true) {
                    if (((ZennoLab.InterfacesLibrary.ProjectModel.Collections.IContextExt)project.Context).IsInterrupted) {
                        tcs.SetResult(true);
                        break;
                    } else if(Global.Variables.IsProjectMaker && !Global.Variables.IsDebugMode) {
                        tcs.SetResult(true);
                        break;
                    }
                }   
            }
            
            await task;
        }

        public static async Task stopTask (IZennoPosterProjectModel project) {
            await tcs.Task;
            project.SendInfoToLog("Stopped");
        }
 

doc

Client
Joined
Mar 30, 2012
Messages
8,685
Reaction score
4,652
Points
113
Если кто поможет допилить, буду признателен. Хотя не исключаю, что логика построенного конструкта вообще не годится для поставленной задачи... Собственно нужно правильно прописать остановку всего кода.

C#:
static TaskCompletionSource<bool> tcs = new TaskCompletionSource<bool>();
       
        public static async void Main(IZennoPosterProjectModel project) {
              await Task.Run(()=>St(project).Wait());
        }
       
        public static async Task St(IZennoPosterProjectModel project)
        {
            var task = stopTask(project);
            project.SendInfoToLog("Started");
            lock(SyncObject)
            {
                while (true) {
                    if (((ZennoLab.InterfacesLibrary.ProjectModel.Collections.IContextExt)project.Context).IsInterrupted) {
                        tcs.SetResult(true);
                        break;
                    } else if(Global.Variables.IsProjectMaker && !Global.Variables.IsDebugMode) {
                        tcs.SetResult(true);
                        break;
                    }
                }  
            }
           
            await task;
        }

        public static async Task stopTask (IZennoPosterProjectModel project) {
            await tcs.Task;
            project.SendInfoToLog("Stopped");
        }
боюсь, я мало что знаю (ничего) о TaskCompletionSource. Единственное, бесконечный цикл настораживает. Без пауз он не будет выжирать проц?
 

ssXXXss

Client
Joined
Dec 23, 2014
Messages
7,374
Reaction score
2,042
Points
113
а лок это чтобы другие потоки не зашли ?
 

RoyalBank

Client
Joined
Sep 7, 2015
Messages
557
Reaction score
553
Points
93
а лок это чтобы другие потоки не зашли ?
На третий/четвертый запуск цикла for 0 < 50 и нажатии кнопки стоп, у меня крашит PM, походу весь конструкт в топку. Возможно асинхр. остановка из любой точки не моё или не взлетает идея, которая была с запуском таска в async.
 

ssXXXss

Client
Joined
Dec 23, 2014
Messages
7,374
Reaction score
2,042
Points
113
На третий/четвертый запуск цикла for 0 < 50 и нажатии кнопки стоп, у меня крашит PM, походу весь конструкт в топку. Возможно асинхр. остановка из любой точки не моё или не взлетает идея, которая была с запуском таска в async.
этим ты мониторишь безбраузерный проект или браузерный ?
17 - я строка это что то новое или сам придумал или оно так сокращёно тоже работает, вот как я давно не посещал форум )))
 

ssXXXss

Client
Joined
Dec 23, 2014
Messages
7,374
Reaction score
2,042
Points
113
и как понять на 3-й 4-й запуск,? типо включил один поток ждёшь а потом добавляешь потоки ?
 

RoyalBank

Client
Joined
Sep 7, 2015
Messages
557
Reaction score
553
Points
93
17 - я строка это что то новое или сам придумал или оно так сокращёно тоже работает, вот как я давно не посещал форум )))
Это проверка для PM, на нажатый "Stop", первая проверка для ZP.

В общем, запускаешь кубик C#, жмеш стоп, пока идет отчет. Он покажет в какой точке стопнули. Дальше если запустить кубик повторно и стоп, то у меня крашит. Подозреваю, что не закрыл таску в первой проходке. Как там приделать exception, чтобы он завершал код я х3, у меня на любом exception крашит. С таской и асинком идея скорее верная, но моя реализация походу кривая полностью.
 

Attachments

ssXXXss

Client
Joined
Dec 23, 2014
Messages
7,374
Reaction score
2,042
Points
113
Это проверка для PM, на нажатый "Stop", первая проверка для ZP.

В общем, запускаешь кубик C#, жмеш стоп, пока идет отчет. Он покажет в какой точке стопнули. Дальше если запустить кубик повторно и стоп, то у меня крашит. Подозреваю, что не закрыл таску в первой проходке. Как там приделать exception, чтобы он завершал код я х3, у меня на любом exception крашит. С таской и асинком идея скорее верная, но моя реализация походу кривая полностью.
да крашит, но я не расматривал что да как
 

Atlas

Client
Joined
Feb 16, 2014
Messages
131
Reaction score
8
Points
18
Не решили эту задачу?
 

Mikhail B.

Client
Joined
Dec 23, 2014
Messages
14,453
Reaction score
5,473
Points
113

Обращаем Ваше внимание на то, что данный пользователь заблокирован.
Не рекомендуем проводить с Mikhail B. какие-либо сделки.

Не решили эту задачу?
Наверно и не стоит ждать решения. А собственными силами не удалось сделать? Опишите задачу, может подскажем чего.
 

Atlas

Client
Joined
Feb 16, 2014
Messages
131
Reaction score
8
Points
18
Наверно и не стоит ждать решения. А собственными силами не удалось сделать? Опишите задачу, может подскажем чего.
Пока нет. "Куча костылей придумано, которые работают честно сказать так себе." - а можно пару ссылок? А то через поиск кроме этой темы почему-то не нашел ничего.
 

Mikhail B.

Client
Joined
Dec 23, 2014
Messages
14,453
Reaction score
5,473
Points
113

Обращаем Ваше внимание на то, что данный пользователь заблокирован.
Не рекомендуем проводить с Mikhail B. какие-либо сделки.

Пока нет. "Куча костылей придумано, которые работают честно сказать так себе." - а можно пару ссылок? А то через поиск кроме этой темы почему-то не нашел ничего.
Есть снипет который считает глобалку. Если номер 0 то идет в одну сторону, если 1 и далее то в другую. Рабочий метод.

Проблема его в том, что эту самую глобалку надо обнулить в конце работы. Иначе след запуск будет с 51 условно, и все пойдет вправо. В целом эта проблема тоже решена в семерке, добавили галку выполнять BAD END при прерывании проекта.
Уже 3 года так работает парсер, в целом все нормально. Если следовать определенным инструкциям.
 
  • Thank you
Reactions: Atlas

mogutov666

Client
Joined
Sep 29, 2013
Messages
241
Reaction score
27
Points
28
Есть снипет который считает глобалку. Если номер 0 то идет в одну сторону, если 1 и далее то в другую. Рабочий метод.

Проблема его в том, что эту самую глобалку надо обнулить в конце работы. Иначе след запуск будет с 51 условно, и все пойдет вправо. В целом эта проблема тоже решена в семерке, добавили галку выполнять BAD END при прерывании проекта.
Уже 3 года так работает парсер, в целом все нормально. Если следовать определенным инструкциям.
А есть пример снипета?
 

Users Who Are Viewing This Thread (Total: 1, Members: 0, Guests: 1)