IPB
ЛогинПароль:

> Внимание!

1. Пользуйтесь тегами кода. - [code] ... [/code]
2. Точно указывайте язык, название и версию компилятора (интерпретатора).
3. Название темы должно быть информативным.
В описании темы указываем язык!!!

Наладить общение поможет, если вы подпишитесь по почте на новые темы в этом форуме.

> Процессы и "задание", С++ Builder
сообщение
Сообщение #1


Профи
****

Группа: Пользователи
Сообщений: 920
Пол: Женский
Реальное имя: Марина

Репутация: -  2  +


Требуется создать несколько процессов и сгруппировать их в «задание».
И в процессе выполнения у меня возникли некоторые вопросы...

STARTUPINFO si;
PROCESS_INFORMATION pi;
ZeroMemory(&si,sizeof(si));
si.cb=sizeof(si);
//Создадим два процесса
CreateProcess
("D:\\WINDOWS\\Lab2.exe",NULL,NULL,NULL,FALSE,0,NULL,NULL,&si,&pi);
CreateProcess
("D:\\Program Files\\Borland\\Delphi7\\Bin\\delphi32.exe",NULL,NULL,NULL,FALSE,0,NULL,NULL,&si,&pi);

SECURITY_ATTRIBUTES sa;
ZeroMemory(&sa,sizeof(sa));
char str[10];
strcpy(str,"Job'\0'");
//Создадим задание
CreateJobObject(&sa,str);
//получим дескриптор объекта-задание
HANDLE hJ = OpenJobObject(JOB_OBJECT_ASSIGN_PROCESS,FALSE,str);

//в предыдущей строке 2-й параметр bInheritHandles - флаг наследования дескриптора...
//каково его назначение?

//Добавим процесс в задание
//AssignProcessToJobObject(hJ,???);



И вопрос в том, как получить дескриптор процесса, добавляемого в задание?
И ещё мне не понятно, как устанавливать ограничения для всех процессов в "задании" на класс приоритета?
(Знаю только константы приоритетов..как использовать, не пойму)..

Сообщение отредактировано: 18192123 -
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
2 страниц V < 1 2  
 Ответить  Открыть новую тему 
Ответов(20 - 29)
сообщение
Сообщение #21


Гость






Что показывает ProcessExplorer? Установились твои приоритеты для JobObject?

Вот, смотри:
Прикрепленное изображение

(то, что выделено слева возвращается твоим методом). Устанавливался IDLE_PRIORITY_CLASS...
 К началу страницы 
+ Ответить 
сообщение
Сообщение #22


Профи
****

Группа: Пользователи
Сообщений: 920
Пол: Женский
Реальное имя: Марина

Репутация: -  2  +


Вроде класс введённый (IDLE) установился...






А при получении информации вижу 32..

Сообщение отредактировано: 18192123 -


Эскизы прикрепленных изображений
Прикрепленное изображение Прикрепленное изображение
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
сообщение
Сообщение #23


Гость






Цитата
Вроде класс введённый (IDLE) установился...
То, что jobli.PriorityClass установился в 64 еще ничего не значит... Я почему и спрашивал у тебя, установилось ли это после вызова SetInformationJobObject в ограничениях твоего задания? Проверь это...
 К началу страницы 
+ Ответить 
сообщение
Сообщение #24


Профи
****

Группа: Пользователи
Сообщений: 920
Пол: Женский
Реальное имя: Марина

Репутация: -  2  +


Цитата(volvo @ 24.10.2008 22:17) *

установилось ли это после вызова SetInformationJobObject в ограничениях твоего задания? Проверь это...

да-да, установилось..
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
сообщение
Сообщение #25


Гость






P.S. Возможно, SetInformationJobObject() или QueryInformationJobObject() возвращают признак ошибки (если возвращается 0, значит функция не отработала), тогда придется получить номер ошибки через GetLastError() и смотреть, в чем причина...

Сообщение отредактировано: volvo -
 К началу страницы 
+ Ответить 
сообщение
Сообщение #26


Профи
****

Группа: Пользователи
Сообщений: 920
Пол: Женский
Реальное имя: Марина

Репутация: -  2  +


Цитата(volvo @ 24.10.2008 22:20) *

P.S. Возможно, SetInformationJobObject() или QueryInformationJobObject() возвращают признак ошибки (если возвращается 0, значит функция не отработала), тогда придется получить номер ошибки через GetLastError() и смотреть, в чем причина...

Да..действительно - SetInformationJobObject() возвращает 0..
Для SetInformationJobObject() функция GetLastError() вернула код ошибки 87..
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
сообщение
Сообщение #27


Гость






ERROR_INVALID_PARAMETER? Показывай вызов функции и заполнение всех ее параметров... Один из них заполнен неправильно...
 К началу страницы 
+ Ответить 
сообщение
Сообщение #28


Профи
****

Группа: Пользователи
Сообщений: 920
Пол: Женский
Реальное имя: Марина

Репутация: -  2  +


Цитата(volvo @ 24.10.2008 22:53) *

ERROR_INVALID_PARAMETER? Показывай вызов функции и заполнение всех ее параметров... Один из них заполнен неправильно...


hjob = CreateJobObject(NULL, TEXT("LAB2"));
// вводим ограничения для процессов в задании
// сначала определяем некоторые базовые ограничения
JOBOBJECT_BASIC_LIMIT_INFORMATION jobli = { 0 };

// процесс всегда выполняется с классом приоритета ...
GetWindowText(hEditPriority,(LPWSTR)lpProcName,50);
if(!wcscmp(lpProcName, L"IDLE"))
{
jobli.PriorityClass = IDLE_PRIORITY_CLASS;
MessageBox(hWndMain,TEXT("IDLE"),TEXT("Class of Priority:"),MB_ICONINFORMATION);
}
if(!wcscmp(lpProcName, L"NORMAL"))
{
jobli.PriorityClass = NORMAL_PRIORITY_CLASS;
MessageBox(hWndMain,TEXT("NORMAL"),TEXT("Class of Priority:"),MB_ICONINFORMATION);
}
if(!wcscmp(lpProcName, L"BELOW_NORMAL"))
{
jobli.PriorityClass = BELOW_NORMAL_PRIORITY_CLASS;
MessageBox(hWndMain,TEXT("BELOW_NORMAL"),TEXT("Class of Priority:"),MB_ICONINFORMATION);
}
if(!wcscmp(lpProcName, L"ABOVE_NORMAL"))
{
jobli.PriorityClass = ABOVE_NORMAL_PRIORITY_CLASS;
MessageBox(hWndMain,TEXT("ABOVE_NORMAL"),TEXT("Class of Priority:"),MB_ICONINFORMATION);
}
// задание не может использовать более одной секунды процессорного времени
//jobli.PerJobUserTimeLimit.QuadPart = 10000000;

// 1 секунда, выраженная в 100-наносекундных интервалах
// два ограничения, которые я налагаю на задание (процесс)
jobli.LimitFlags = JOB_OBJECT_LIMIT_PRIORITY_CLASS | JOB_OBJECT_LIMIT_JOB_TIME;
DWORD fl=0;
if (SetInformationJobObject(hjob, JobObjectBasicLimitInformation, &jobli, sizeof(jobli))==0)
fl=GetLastError();


 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
сообщение
Сообщение #29


Гость






Цитата
jobli.LimitFlags = JOB_OBJECT_LIMIT_PRIORITY_CLASS | JOB_OBJECT_LIMIT_JOB_TIME;
, но при этом поле PerJobUserTimeLimit.QuadPart остается незаполненным? Либо заполняй поле, либо меняй маску на
jobli.LimitFlags = JOB_OBJECT_LIMIT_PRIORITY_CLASS;
 К началу страницы 
+ Ответить 
сообщение
Сообщение #30


Профи
****

Группа: Пользователи
Сообщений: 920
Пол: Женский
Реальное имя: Марина

Репутация: -  2  +


Цитата(volvo @ 24.10.2008 23:12) *

либо меняй маску на
jobli.LimitFlags = JOB_OBJECT_LIMIT_PRIORITY_CLASS;


Поменяла - теперь отрабатывает верно!
Спасибо!)
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 

2 страниц V < 1 2
 Ответить  Открыть новую тему 
2 чел. читают эту тему (гостей: 2, скрытых пользователей: 0)
Пользователей: 0

 





- Текстовая версия 24.05.2024 21:26
500Gb HDD, 6Gb RAM, 2 Cores, 7 EUR в месяц — такие хостинги правда бывают
Связь с администрацией: bu_gen в домене octagram.name