как получить кол-во потоков ?

wizard

Client
Регистрация
04.10.2011
Сообщения
1 004
Благодарностей
632
Баллы
113
Есть способ получить количество запущенных потоков ?
 

WebBot

Client
Регистрация
04.04.2015
Сообщения
1 763
Благодарностей
1 391
Баллы
113

doc

Client
Регистрация
30.03.2012
Сообщения
8 684
Благодарностей
4 641
Баллы
113
из коробки вроде можно получить только общее число занятых потоков. Но не конкретно по проекту
 

Lord_Alfred

Client
Регистрация
09.10.2015
Сообщения
3 916
Благодарностей
3 867
Баллы
113
Есть способ получить количество запущенных потоков ?
https://help.zennolab.com/en/v5/zennoposter/5.14.0.0/webframe.html#topic590.html

Кусок кода из ZennoJSBench (там шаблон открыт если что):
C#:
// GUID проекта
Guid project_guid = Guid.Parse(project.TaskId);
// Количество ядер в машине
int cores = Environment.ProcessorCount;

// Полная инфа о текущем проекте в XML-формате (ВРОДЕ БЫ НЕ работает в ProjectMaker)
string task_info = ZennoPoster.GetTaskInfo(project_guid);

// создаем XML и задаем нужные параметры для запуска (НЕ ЗАБУДЬТЕ ДОБАВИТЬ В GAC + using)
var doc = new System.Xml.XmlDocument();
doc.LoadXml("<Task>" + task_info + "</Task>");

var esElement = doc.SelectSingleNode("Task/ExecutionSettings");
if (esElement == null) {
    throw new Exception("Не нашли ноду Task/ExecutionSettings");
}
var threadsElement = doc.SelectSingleNode("Task/ExecutionSettings/LimitOfThreads");
if (threadsElement == null) {
    throw new Exception("Не нашли ноду Task/ExecutionSettings/LimitOfThreads");
}
// изменяем количество потоков
threadsElement.InnerText = Convert.ToString(cores);

var triesElement = doc.SelectSingleNode("Task/ExecutionSettings/NumberOfTries");
if (triesElement == null) {
    throw new Exception("Не нашли ноду Task/ExecutionSettings/NumberOfTries");
}
// количество повторений + 1 (т.к. текущий запуск для установки данных тоже считается)
triesElement.InnerText = Convert.ToString(cores + 1);

// Передаем новые данные в постер для запуска заданий
ZennoPoster.SetExecutionSettings(project_guid, esElement.InnerXml);

// результат - в лог
project.SendWarningToLog(
    String.Format(
        "Запустили {0} параллельных потоков (по числу ядер в системе)",
        cores
    ),
    true
);
Код делает совсем другое, но по аналогии, думаю, сможете разобраться )
 

ssXXXss

Client
Регистрация
23.12.2014
Сообщения
7 379
Благодарностей
2 041
Баллы
113
и по проекту можно указав название проекта
 

wizard

Client
Регистрация
04.10.2011
Сообщения
1 004
Благодарностей
632
Баллы
113

doc

Client
Регистрация
30.03.2012
Сообщения
8 684
Благодарностей
4 641
Баллы
113
сколько прописано потоков в настройках и сколько запущено - не одно и тоже
 

ssXXXss

Client
Регистрация
23.12.2014
Сообщения
7 379
Благодарностей
2 041
Баллы
113
  • Спасибо
Реакции: wizard

irving zisman

Client
Регистрация
18.05.2017
Сообщения
225
Благодарностей
28
Баллы
28
@Lord_Alfred Привел код в нормальный вид, но он возвращает максимальное число потоков, есть ли способ получить текущее число запущенных поток?

C#:
// GUID проекта
Guid project_guid = Guid.Parse(project.TaskId);

// Полная инфа о текущем проекте в XML-формате (НЕ работает в ProjectMaker)
string task_info = ZennoPoster.GetTaskInfo(project_guid);

// создаем XML и задаем нужные параметры для запуска (НЕ ЗАБУДЬТЕ ДОБАВИТЬ В GAC + using: using System.Xml;)
var doc = new System.Xml.XmlDocument();
doc.LoadXml("<Task>" + task_info + "</Task>");

var threadsElement = doc.SelectSingleNode("Task/ExecutionSettings/LimitOfThreads");
if (threadsElement == null) {
    throw new Exception("Не нашли ноду Task/ExecutionSettings/LimitOfThreads");
}

project.Variables["threads"].Value = threadsElement.InnerText;
 
Последнее редактирование:

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