首页 > 技术文章 > SetPriorityClass CreateProcess

lcfwzq 2013-07-05 13:21 原文

一、创建了进程,优先权当然也设置咯,可以再CreateProcess参数中设置,也可以调用SetPriorityClass进行设置

SetPriorityClass

设置优先权

函数原型:

BOOL SetPriorityClass(
HANDLE hProcess,
DWORD dwPriorityClass
);
GetPriorityClass

得到优先权

函数原型:

DWORD GetPriorityClass(
HANDLE hProcess
);

dwPriorityClass:

ABOVE_NORMAL_PRIORITY_CLASS 0x00008000
BELOW_NORMAL_PRIORITY_CLASS 0x00004000
HIGH_PRIORITY_CLASS 0x00000080

IDLE_PRIORITY_CLASS 0x00000040
NORMAL_PRIORITY_CLASS 0x00000020

REALTIME_PRIORITY_CLASS 0x00000100

例:

if (!CreateProcess("D://Program Files//TTPlayer//TTPlayer.exe", GetCommandLine(), NULL,
NULL, FALSE, CREATE_DEFAULT_ERROR_MODE | NORMAL_PRIORITY_CLASS, NULL, NULL, &si, &pi))
{

CloseHandle(pi.hThread);
WaitForSingleObject(pi.hProcess, INFINITE);
CloseHandle(pi.hProcess);
}

BOOL fTemp = SetPriorityClass(pi.hProcess, HIGH_PRIORITY_CLASS);
//BOOL fTemp = SetPriorityClass(pi.hProcess, 21);
LONG lRet = GetPriorityClass(pi.hProcess);
//----------------------------------------------
17:39 2013-07-03
#include <windows.h>
#include <tchar.h>

int main( void )
{
DWORD dwError, dwPriClass;

if(!SetPriorityClass(GetCurrentProcess(), PROCESS_MODE_BACKGROUND_BEGIN))
{
dwError = GetLastError();
if( ERROR_PROCESS_MODE_ALREADY_BACKGROUND == dwError)
_tprintf(TEXT("Already in background mode\n"));
else _tprintf(TEXT("Failed to enter background mode (%d)\n"), dwError);
goto Cleanup;
}

// Display priority class

dwPriClass = GetPriorityClass(GetCurrentProcess());

_tprintf(TEXT("Current priority class is 0x%x\n"), dwPriClass);

//
// Perform background work
//
;

if(!SetPriorityClass(GetCurrentProcess(), PROCESS_MODE_BACKGROUND_END))
{
_tprintf(TEXT("Failed to end background mode (%d)\n"), GetLastError());
}

Cleanup:
// Clean up
;
return 0;
}

推荐阅读