Win32API プロセスの優先度クラスを設定・取得する SetPriorityClass, GetPriorityClass

プロセスの優先度クラスを設定・取得する

プロセスの優先度クラスとは、プロセスのCPU割り当てのされやすさのようなもの。プロセスにCPUを割り当てるのはスケジューラが行う。



使用するAPI

  • SetPriorityClass

  • GetPriorityClass


  • プロセスの優先度クラスには以下のようなものがある


    IDLE_PRIORITY_CLASSアイドル
    BELOW_NORMAL_PRIORITY_CLASS通常以下
    NORMAL_PRIORITY_CLASS通常
    ABOVE_NORMAL_PRIORITY_CLASS通常以上
    HIGH_PRIORITY_CLASS
    REALTIME_PRIORITY_CLASSリアルタイム




    #include <windows.h>
    
    int main()
    {
    	HANDLE hProcess;
    
    	hProcess = GetCurrentProcess();
    	
    	if (SetPriorityClass(hProcess, REALTIME_PRIORITY_CLASS)) {
    		puts("SetPriorityClass: Success");
    	} else {
    		puts("SetPriorityClass: Error");
    	}
    
    	switch (GetPriorityClass(hProcess)) {
    		case IDLE_PRIORITY_CLASS:
    			puts("IDLE_PRIORITY_CLASS");
    			break;
    
    		case BELOW_NORMAL_PRIORITY_CLASS:
    			puts("BELOW_NORMAL_PRIORITY_CLASS");
    			break;
    		
    		case NORMAL_PRIORITY_CLASS:
    			puts("NORMAL_PRIORITY_CLASS");
    			break;
    
    		case ABOVE_NORMAL_PRIORITY_CLASS:
    			puts("ABOVE_NORMAL_PRIORITY_CLASS");
    			break;
    
    		case HIGH_PRIORITY_CLASS:
    			puts("HIGH_PRIORITY_CLASS");
    			break;
    
    		case REALTIME_PRIORITY_CLASS:
    			puts("REALTIME_PRIORITY_CLASS");
    			break;
    	}
    
    	return 0;
    }
    

    補足: このコードでは、自身のプロセス優先度クラスを「リアルタイム」に設定しているが、このコードをWindows Vistaで実行したところ、「高」に設定されてしまった。Windows Vistaではプロセス優先度クラスを「リアルタイム」に設定できないようだ。