-
Запускаю программы через CreateProcess. Есть возможность устанавливать приоритет запускаемых программ 'выше среднего' и 'ниже среднего'?
P.S. В модуле 'Windows.pas' есть только: IDLE_PRIORITY_CLASS = низкий NORMAL_PRIORITY_CLASS = средний HIGH_PRIORITY_CLASS = высокий REALTIME_PRIORITY_CLASS = реального времени
-
см. SetThreadPriority
-
> Elec3C © (28.11.07 15:36)
'ниже среднего' = низкий
'выше среднего' = высокий
Этого недостаточно ?
-
> 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;
В результате, как был средний приоритет, так и остался. Что я делаю не так?
-
> CreateProcess(nil, 'C:\Windows\notepad.exe', nil, nil, > False, 0, nil, nil, SI, PI); > > SetThreadPriority(hThread, THREAD_PRIORITY_BELOW_NORMAL) > ; // Вроде бы ниже среднего
Все прекрасно, но где в переменную hThread записывается дескриптор нити?
-
> [3] Elec3C © (28.11.07 16:12)
дело в том, что процесс задает как бы класс приоритета, а фактический приоритет задачи определяется как класс приоритета процесса +- приоритет потока. Т.е. реальный приоритет отсчитывается относительно процесса
-
> Джо ©
ХМ!? В CreateProcess в PI. Или нет? P.S. А как правильно сделать?
-
> clickmaker ©
Так каким образом реализовать [0].
-
> [7] Elec3C © (28.11.07 16:53)
NORMAL_PRIORITY_CLASS для процесса THREAD_PRIORITY_BELOW_NORMAL для основного потока
-
CreateProcess(nil, 'C:\Windows\notepad.exe', nil, nil, False, NORMAL_PRIORITY_CLASS, nil, nil, SI, PI); SetThreadPriority(hThread, THREAD_PRIORITY_BELOW_NORMAL);
Не работает(Или работает но не так, как нужно)! Как был средний приоритет нотепада, так и остался (Хотя должен был измениться на 'Ниже среднего').
-
^
-
> [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]. Я нудный.
-
> Если это реальный код, то повторю вопрос [4]. Я нудный.
> with SI, PI do > begin
-
> [12] Германн © (29.11.07 15:32) > > > Если это реальный код, то повторю вопрос [4]. Я нудный. > > > > with SI, PI do > > begin
А, мало того, что я нудный, так я еще и слепой :)
-
Так в чём ошибка?
-
Права на hProcess и hThread позволяют менять приоритет?
-
> Elec3C © (29.11.07 17:12) [14]
> Так в чём ошибка?
А чем ты меряешь "Ниже среднего"?
-- Regards, LVT.
-
-
> А чем ты меряешь "Ниже среднего"?
Дисп. задач (Там же устанавливается приоритет 'Ниже среднего' и 'Выше среднего').
-
> Elec3C © (29.11.07 22:08) [18] > Дисп. задач (Там же устанавливается приоритет 'Ниже среднего'
Дык, он показывает базовый приоритет процесса, а менять ты пытаешься потоку.
RTFM, со слова Get. И не надо забывать анализ GetLastError.
-- Regards, LVT.
-
Не совсем понял?! P.S. GetPriorityClass???
-
|