Форум: "Основная";
Текущий архив: 2008.08.10;
Скачать: [xml.tar.bz2];
ВнизПриоритет программ через CreateProcess Найти похожие ветки
← →
Elec3C © (2007-11-28 15:36) [0]Запускаю программы через CreateProcess. Есть возможность устанавливать приоритет запускаемых программ "выше среднего" и "ниже среднего"?
P.S. В модуле "Windows.pas" есть только:
IDLE_PRIORITY_CLASS = низкий
NORMAL_PRIORITY_CLASS = средний
HIGH_PRIORITY_CLASS = высокий
REALTIME_PRIORITY_CLASS = реального времени
← →
clickmaker © (2007-11-28 15:38) [1]см. SetThreadPriority
← →
Сергей М. © (2007-11-28 15:39) [2]
> Elec3C © (28.11.07 15:36)
"ниже среднего" = низкий
"выше среднего" = высокий
Этого недостаточно ?
← →
Elec3C © (2007-11-28 16:12) [3]
> 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 16:18) [4]> CreateProcess(nil, "C:\Windows\notepad.exe", nil, nil,
> False, 0, nil, nil, SI, PI);
>
> SetThreadPriority(hThread, THREAD_PRIORITY_BELOW_NORMAL)
> ; // Вроде бы ниже среднего
Все прекрасно, но где в переменную hThread записывается дескриптор нити?
← →
clickmaker © (2007-11-28 16:23) [5]
> [3] Elec3C © (28.11.07 16:12)
дело в том, что процесс задает как бы класс приоритета, а фактический приоритет задачи определяется как класс приоритета процесса +- приоритет потока. Т.е. реальный приоритет отсчитывается относительно процесса
← →
Elec3C © (2007-11-28 16:32) [6]
> Джо ©
ХМ!? В CreateProcess в PI. Или нет?
P.S. А как правильно сделать?
← →
Elec3C © (2007-11-28 16:53) [7]
> clickmaker ©
Так каким образом реализовать [0].
← →
clickmaker © (2007-11-28 17:05) [8]
> [7] Elec3C © (28.11.07 16:53)
NORMAL_PRIORITY_CLASS для процесса
THREAD_PRIORITY_BELOW_NORMAL для основного потока
← →
Elec3C © (2007-11-28 17:56) [9]CreateProcess(nil, "C:\Windows\notepad.exe", nil, nil, False, NORMAL_PRIORITY_CLASS, nil, nil, SI, PI);
SetThreadPriority(hThread, THREAD_PRIORITY_BELOW_NORMAL);
Не работает(Или работает но не так, как нужно)! Как был средний приоритет нотепада, так и остался (Хотя должен был измениться на "Ниже среднего").
← →
Elec3C © (2007-11-29 15:04) [10]^
← →
Джо © (2007-11-29 15:20) [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]. Я нудный.
← →
Германн © (2007-11-29 15:32) [12]
> Если это реальный код, то повторю вопрос [4]. Я нудный.
> with SI, PI do
> begin
← →
Джо © (2007-11-29 15:40) [13]> [12] Германн © (29.11.07 15:32)
>
> > Если это реальный код, то повторю вопрос [4]. Я нудный.
>
>
> > with SI, PI do
> > begin
А, мало того, что я нудный, так я еще и слепой :)
← →
Elec3C © (2007-11-29 17:12) [14]Так в чём ошибка?
← →
Юрий Зотов © (2007-11-29 17:22) [15]Права на hProcess и hThread позволяют менять приоритет?
← →
Leonid Troyanovsky © (2007-11-29 20:23) [16]
> Elec3C © (29.11.07 17:12) [14]
> Так в чём ошибка?
А чем ты меряешь "Ниже среднего"?
--
Regards, LVT.
← →
Leonid Troyanovsky © (2007-11-29 20:25) [17]
> Elec3C © (28.11.07 15:36)
> P.S. В модуле "Windows.pas" есть только:
http://msdn2.microsoft.com/en-us/library/ms686219.aspx
--
Regards, LVT.
← →
Elec3C © (2007-11-29 22:08) [18]
> А чем ты меряешь "Ниже среднего"?
Дисп. задач (Там же устанавливается приоритет "Ниже среднего" и "Выше среднего").
← →
Leonid Troyanovsky © (2007-11-29 22:49) [19]
> Elec3C © (29.11.07 22:08) [18]
> Дисп. задач (Там же устанавливается приоритет "Ниже среднего"
Дык, он показывает базовый приоритет процесса,
а менять ты пытаешься потоку.
RTFM, со слова Get.
И не надо забывать анализ GetLastError.
--
Regards, LVT.
← →
Elec3C © (2007-11-29 23:21) [20]Не совсем понял?!
P.S. GetPriorityClass???
← →
Elec3C © (2007-11-29 23:29) [21]Лекарство http://msdn2.microsoft.com/en-us/library/ms686219.aspx помогло!!!
Ветку можно закрыть.
Страницы: 1 вся ветка
Форум: "Основная";
Текущий архив: 2008.08.10;
Скачать: [xml.tar.bz2];
Память: 0.49 MB
Время: 0.007 c