![]() |
| ||
|
|
Новости |
Поиск |
FAQ |
Статьи |
Книги |
Новости VCL
| | Форумы ЧАТ |
Орешник |
|
| |||
| |||
« предыдущая ветвь | форум | следующая ветвь »
Приоритет программ через CreateProcess [D7]
Elec3C © (2007-11-28 15:36:00)Запускаю программы через CreateProcess. Есть возможность устанавливать приоритет запускаемых программ 'выше среднего' и 'ниже среднего'?
P.S. В модуле 'Windows.pas' есть только:
IDLE_PRIORITY_CLASS = низкий
NORMAL_PRIORITY_CLASS = средний
HIGH_PRIORITY_CLASS = высокий
REALTIME_PRIORITY_CLASS = реального времени
Elec3C (2007-11-29 23:29:00) [1]Лекарство http://msdn2.microsoft.com/en-us/library/ms686219.aspxпомогло!!!
Ветку можно закрыть.
Elec3C (2007-11-29 23:21:00) [2]Не совсем понял?!
P.S. GetPriorityClass???
Leonid Troyanovsky (2007-11-29 22:49:00) [3]
> Elec3C © (29.11.07 22:08) [18]
> Дисп. задач (Там же устанавливается приоритет 'Ниже среднего'
Дык, он показывает базовый приоритет процесса,
а менять ты пытаешься потоку.
RTFM, со слова Get.
И не надо забывать анализ GetLastError.
--
Regards, LVT.
Elec3C (2007-11-29 22:08:00) [4]
> А чем ты меряешь "Ниже среднего"?
Дисп. задач (Там же устанавливается приоритет 'Ниже среднего' и 'Выше среднего').
Leonid Troyanovsky (2007-11-29 20:25:00) [5]
> Elec3C © (28.11.07 15:36)
> P.S. В модуле 'Windows.pas' есть только:
http://msdn2.microsoft.com/en-us/library/ms686219.aspx
--
Regards, LVT.
Leonid Troyanovsky (2007-11-29 20:23:00) [6]
> Elec3C © (29.11.07 17:12) [14]
> Так в чём ошибка?
А чем ты меряешь "Ниже среднего"?
--
Regards, LVT.
Юрий Зотов (2007-11-29 17:22:00) [7]Права на hProcess и hThread позволяют менять приоритет?
Elec3C (2007-11-29 17:12:00) [8]Так в чём ошибка?
Джо (2007-11-29 15:40:00) [9]> [12] Германн © (29.11.07 15:32)
>
> > Если это реальный код, то повторю вопрос [4]. Я нудный.
>
>
> > with SI, PI do
> > begin
А, мало того, что я нудный, так я еще и слепой :)
Германн (2007-11-29 15:32:00) [10]
> Если это реальный код, то повторю вопрос [4]. Я нудный.
> with SI, PIdo
> begin
Джо (2007-11-29 15:20:00) [11]> [9] Elec3C © (28.11.07 17:56)
> CreateProcess(nil, 'C:\Windows\notepad.exe', nil, nil, False,
> NORMAL_PRIORITY_CLASS, nil, nil, SI, PI);
> SetThreadPriority(hThread, THREAD_PRIORITY_BELOW_NORMAL)
> ;
>
> Не работает
Если это реальный код, то повторю вопрос [4]. Я нудный.
Elec3C (2007-11-29 15:04:00) [12]^
Elec3C (2007-11-28 17:56:00) [13]CreateProcess(nil, 'C:\Windows\notepad.exe', nil, nil, False, NORMAL_PRIORITY_CLASS, nil, nil, SI, PI);
SetThreadPriority(hThread, THREAD_PRIORITY_BELOW_NORMAL);
Не работает(Или работает но не так, как нужно)! Как был средний приоритет нотепада, так и остался (Хотя должен был измениться на 'Ниже среднего').
clickmaker (2007-11-28 17:05:00) [14]
> [7] Elec3C © (28.11.07 16:53)
NORMAL_PRIORITY_CLASS для процесса
THREAD_PRIORITY_BELOW_NORMAL для основного потока
Elec3C (2007-11-28 16:53:00) [15]
> clickmaker ©
Так каким образом реализовать [0].
Elec3C (2007-11-28 16:32:00) [16]
> Джо ©
ХМ!? В CreateProcess в PI. Или нет?
P.S. А как правильно сделать?
clickmaker (2007-11-28 16:23:00) [17]
> [3] Elec3C © (28.11.07 16:12)
дело в том, что процесс задает как бы класс приоритета, а фактический приоритет задачи определяется как класс приоритета процесса +- приоритет потока. Т.е. реальный приоритет отсчитывается относительнопроцесса
Джо (2007-11-28 16:18:00) [18]> CreateProcess(nil, 'C:\Windows\notepad.exe', nil, nil,
> False, 0, nil, nil, SI, PI);
>
> SetThreadPriority(hThread, THREAD_PRIORITY_BELOW_NORMAL)
> ; // Вроде бы ниже среднего
Все прекрасно, но где в переменную hThread записывается дескриптор нити?
Elec3C (2007-11-28 16:12:00) [19]
> clickmaker ©
Значит, я пишу так:
var
SI : _STARTUPINFOA;
PI : _PROCESS_INFORMATION;
begin
ZeroMemory(@SI, SizeOf(_STARTUPINFOA));
ZeroMemory(@PI, SizeOf(_PROCESS_INFORMATION));
with SI, PI do
begin
cb := SizeOf(_STARTUPINFOA);
dwFlags := STARTF_USESHOWWINDOW;
wShowWindow := SW_SHOWNORMAL;
CreateProcess(nil, 'C:\Windows\notepad.exe', nil, nil, False, 0, nil, nil, SI, PI);
SetThreadPriority(hThread, THREAD_PRIORITY_BELOW_NORMAL); // Вроде бы ниже среднего
CloseHandle(hProcess); CloseHandle(hThread); CloseHandle(hStdError);
CloseHandle(hStdInput); CloseHandle(hStdOutPut);
end;
В результате, как был средний приоритет, так и остался. Что я делаю не так?
Сергей М. (2007-11-28 15:39:00) [20]
> Elec3C © (28.11.07 15:36)
'ниже среднего' = низкий
'выше среднего' = высокий
Этого недостаточно ?