Конференция "Основная" » Приоритет программ через CreateProcess [D7]
 
  • Elec3C © (28.11.07 15:36) [0]
    Запускаю программы через CreateProcess. Есть возможность устанавливать приоритет запускаемых программ 'выше среднего' и 'ниже среднего'?

    P.S. В модуле 'Windows.pas' есть только:
        IDLE_PRIORITY_CLASS      = низкий
        NORMAL_PRIORITY_CLASS    = средний      
     
        HIGH_PRIORITY_CLASS      = высокий      
        REALTIME_PRIORITY_CLASS  = реального времени
  • clickmaker © (28.11.07 15:38) [1]
    см. SetThreadPriority
  • Сергей М. © (28.11.07 15:39) [2]

    > Elec3C ©   (28.11.07 15:36)


    'ниже среднего' = низкий

    'выше среднего' = высокий

    Этого недостаточно ?
  • Elec3C © (28.11.07 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;

    В результате, как был средний приоритет, так и остался. Что я делаю не так?
  • Джо © (28.11.07 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 © (28.11.07 16:23) [5]

    >  [3] Elec3C ©   (28.11.07 16:12)

    дело в том, что процесс задает как бы класс приоритета, а фактический приоритет задачи определяется как класс приоритета процесса +- приоритет потока. Т.е. реальный приоритет отсчитывается относительно процесса
  • Elec3C © (28.11.07 16:32) [6]

    > Джо ©

    ХМ!? В CreateProcess в PI. Или нет?
    P.S. А как правильно сделать?
  • Elec3C © (28.11.07 16:53) [7]

    > clickmaker ©

    Так каким образом реализовать [0].
  • clickmaker © (28.11.07 17:05) [8]

    > [7] Elec3C ©   (28.11.07 16:53)

    NORMAL_PRIORITY_CLASS  для процесса
    THREAD_PRIORITY_BELOW_NORMAL для основного потока
  • Elec3C © (28.11.07 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 © (29.11.07 15:04) [10]
    ^
  • Джо © (29.11.07 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]. Я нудный.
  • Германн © (29.11.07 15:32) [12]

    > Если это реальный код, то повторю вопрос [4]. Я нудный.


    > with SI, PI do
    >   begin
  • Джо © (29.11.07 15:40) [13]
    > [12] Германн ©   (29.11.07 15:32)
    >
    > > Если это реальный код, то повторю вопрос [4]. Я нудный.
    >
    >
    > > with SI, PI do
    > >   begin

    А, мало того, что я нудный, так я еще и слепой :)
  • Elec3C © (29.11.07 17:12) [14]
    Так в чём ошибка?
  • Юрий Зотов © (29.11.07 17:22) [15]
    Права на hProcess и hThread позволяют менять приоритет?
  • Leonid Troyanovsky © (29.11.07 20:23) [16]

    > Elec3C ©   (29.11.07 17:12) [14]

    > Так в чём ошибка?

    А чем ты меряешь "Ниже среднего"?

    --
    Regards, LVT.
  • Leonid Troyanovsky © (29.11.07 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 © (29.11.07 22:08) [18]

    > А чем ты меряешь "Ниже среднего"?

    Дисп. задач (Там же устанавливается приоритет 'Ниже среднего' и  'Выше среднего').
  • Leonid Troyanovsky © (29.11.07 22:49) [19]

    > Elec3C ©   (29.11.07 22:08) [18]

    > Дисп. задач (Там же устанавливается приоритет 'Ниже среднего'

    Дык, он показывает базовый приоритет процесса,
    а менять ты пытаешься потоку.

    RTFM, со слова Get.
    И не надо забывать анализ GetLastError.

    --
    Regards, LVT.
  • Elec3C © (29.11.07 23:21) [20]
    Не совсем понял?!
    P.S. GetPriorityClass???
  • Elec3C © (29.11.07 23:29) [21]
    Лекарство http://msdn2.microsoft.com/en-us/library/ms686219.aspx помогло!!!
    Ветку можно закрыть.
 
Конференция "Основная" » Приоритет программ через CreateProcess [D7]
Есть новые Нет новых   [134480   +18][b:0][p:0.001]