Поучение номера потока и количество "Максимум потоков"

  • Автор темы Dronhik
  • Дата начала
D

Dronhik

Guest
Всем привет. Требуется чтобы в каждом потоке шаблон знал: номер своего потока и сколько всего потоков максимум(Указывается в ZennoPoster в меню в поле: Максимум потоков). Как можно такое реализовать?


Я сделал через файл(каждый новый поток берет новую строку: 1, 2 и тд) и во входных настройках указал количество потоков - неудобно и не практично.

Нашел код на форуме. Вот в этой теме: https://zennolab.com/discussion/threads/uznat-kolichestvo-zapuschennyx-potokov.25120/

C#:
string status = string.Empty;
for(int a = 0; a < 10; a++)
   {
   var yourname = "reger_1";//имя шаблона
   var tasks = ZennoPoster.TasksList;
   foreach(var task in tasks)
   {
     var doc = new System.Xml.XmlDocument();
     doc.LoadXml("<Task>" + task + "</Task>");
     string name;
     var nameNode = doc.SelectSingleNode("Task/Name");
     if(nameNode != null && nameNode.InnerText.Equals(yourname))
     {
    name = nameNode.InnerXml;
       //ZennoPoster.AddTries(name, 1);
         if (Global.Variables.IsProjectMaker) if (!Global.Variables.IsDebugMode) break;
         status = doc.SelectSingleNode("Task/ExecutionSettings/NumberOfTries").InnerText;
         //Complete
         return status;

     }
   }
}
Но насколько я понял, он выводит только кол-во запущенных потоков в данный момент, а не число установленное в поле: "Максимум потоков". И номер потока он так же не выводит совсем.

И я не особо кодер, не понял как можно сохранить данные в переменную в проекте. Или сначала засунуть в одну переменную, а потом обрабатывать xml экшеном

Видел так же темы с решением данного вопроса через глобальную переменную, но там дело у людей зашло в тупик.

Подскажите, пожалуйста, что можно предпринять, возможно доработать c# код или совершенно другой подход. Заранее спасибо
 

Koqpe

Client
Регистрация
23.12.2014
Сообщения
1 100
Благодарностей
649
Баллы
113
По первому пункту, задавайте уникальное имя инстанса, я например устанавливаю имя инстанса по названию профиля в виде номера телефона на который зарегистрирован аккаунт.
C#:
instance.AddToTitle(project.Variables["login"].Value);
Во втором пункте не вижу смысла, забываете сколько установили потоков? Как вариант передавайте нужное число в проект через настройки.
 
D

Dronhik

Guest
Во втором пункте не вижу смысла, забываете сколько установили потоков? Как вариант передавайте нужное число в проект через настройки.
Требуется для математических действий в проекте. Через входные настройки и так реализовано, интересует автоматизация.



По первому пункту, задавайте уникальное имя инстанса
Не понял данной реализации. Я устанавливаю к примеру 3 потока. В первом потоке должна быть 1, во втором 2 и в 3 тройка соответственно(именно числа, т.к тоже использауются для вычислений). Если общей командой в шаблоне задавать имя инстанса, то при запуске многопотока оно будет одно и то же
 
D

Dronhik

Guest
rostonix
Напсиал код, может быть поможет еще раз. Спасибо
 

Phoenix78

Client
Read only
Регистрация
06.11.2018
Сообщения
11 790
Благодарностей
5 715
Баллы
113
Не понял данной реализации. Я устанавливаю к примеру 3 потока. В первом потоке должна быть 1, во втором 2 и в 3 тройка соответственно(именно числа, т.к тоже использауются для вычислений). Если общей командой в шаблоне задавать имя инстанса, то при запуске многопотока оно будет одно и то же
у потоков нет нумерации. это просто отдельный запущенный процесс и в нем вы можете сгенерировать уникальное случайное число, которое и будет выделять его из толпы.ну а дальше вы сами должны определять нумерацию. и сами должны решить что делать и как еще раз нумеровать потоки когда из 10 работающих потоков закрываются например 2,5,6 и 8 . следующий запущенный поток должен иметь номер 2 или 11 ?
 
D

Dronhik

Guest
у потоков нет нумерации. это просто отдельный запущенный процесс и в нем вы можете сгенерировать уникальное случайное число, которое и будет выделять его из толпы.ну а дальше вы сами должны определять нумерацию. и сами должны решить что делать и как еще раз нумеровать потоки когда из 10 работающих потоков закрываются например 2,5,6 и 8 . следующий запущенный поток должен иметь номер 2 или 11 ?
Хорошо. Это я понял, меня не интересует замена чисел, если поток отваливается. Мне главное чтобы в каждом потоке было число по порядку(1,2,3 и тд) Если поток уходит на ошибку другие потоки должны работать с тем же самым числом, которые было у них изначально

Можно это реализовать как-то еще кроме как через взятие в файле и удаление строки. Числа между потоками не должны пересекаться и границы чисел от 1 до макс. кол-во потоков
 

Phoenix78

Client
Read only
Регистрация
06.11.2018
Сообщения
11 790
Благодарностей
5 715
Баллы
113
Хорошо. Это я понял, меня не интересует замена чисел, если поток отваливается. Мне главное чтобы в каждом потоке было число по порядку(1,2,3 и тд) Если поток уходит на ошибку другие потоки должны работать с тем же самым числом, которые было у них изначально

Можно это реализовать как-то еще кроме как через взятие в файле и удаление строки. Числа между потоками не должны пересекаться и границы чисел от 1 до макс. кол-во потоков
есть глобальные переменные. можете счетчик потоков в них организовать. только их лочить надо. запустили поток, залочили переменную, увеличили на 1, разлочили. номер используете. насчет ограничения максимума потоков, то это не понятно. вот вы запустили 10 потоков из 10. все 10 чисел заюзали. вышел поток номер 5 , работают 9. запускается еще один. и получает номер 11 ? или 5 ? :-)
 
  • Спасибо
Реакции: Dronhik
D

Dronhik

Guest
есть глобальные переменные. можете счетчик потоков в них организовать. только их лочить надо. запустили поток, залочили переменную, увеличили на 1, разлочили. номер используете. насчет ограничения максимума потоков, то это не понятно. вот вы запустили 10 потоков из 10. все 10 чисел заюзали. вышел поток номер 5 , работают 9. запускается еще один. и получает номер 11 ? или 5 ? :-)
Нет, если один поток вылетел, то больше не запускается
 
D

Dronhik

Guest
есть глобальные переменные. можете счетчик потоков в них организовать. только их лочить надо. запустили поток, залочили переменную, увеличили на 1, разлочили. номер используете. насчет ограничения максимума потоков, то это не понятно. вот вы запустили 10 потоков из 10. все 10 чисел заюзали. вышел поток номер 5 , работают 9. запускается еще один. и получает номер 11 ? или 5 ? :-)
То приходится перезапускать зенопостер, чтобы она обнулилась
 
D

Dronhik

Guest
есть глобальные переменные. можете счетчик потоков в них организовать. только их лочить надо. запустили поток, залочили переменную, увеличили на 1, разлочили. номер используете. насчет ограничения максимума потоков, то это не понятно. вот вы запустили 10 потоков из 10. все 10 чисел заюзали. вышел поток номер 5 , работают 9. запускается еще один. и получает номер 11 ? или 5 ? :-)
То приходится перезапускать зенопостер, чтобы она обнулилась
И не разу не работал с ними, не нашел нафоруме прото как лочить. Если не лочить может привести к каким то ошибкам или переплетению потоков?
 
Последнее редактирование модератором:
D

Dronhik

Guest

Phoenix78

Client
Read only
Регистрация
06.11.2018
Сообщения
11 790
Благодарностей
5 715
Баллы
113
И правильно ли я понял, пока переменная будет залочена другие потоки будут ждать, и так все поочереди?
да. так и есть. кубик чтения/записи в список тоже лочит файл, только там автоматом это происходит. так что возможно через файл это и не плохой вариант.... кстати :-)
 
D

Dronhik

Guest
да. так и есть. кубик чтения/записи в список тоже лочит файл, только там автоматом это происходит. так что возможно через файл это и не плохой вариант.... кстати :-)
Я уже попробовал способ через глобальную, вот он отлично подходит, через файл не так удобно)
Только вот бывает проскакивает, что потоки одновременно ее берут. Я поэтому и спросил какой командой лочить, потому что на форму ничего нет)
 
D

Dronhik

Guest

Phoenix78

Client
Read only
Регистрация
06.11.2018
Сообщения
11 790
Благодарностей
5 715
Баллы
113

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