アプリケーションを実行する優先順位を変更する

最終更新 2003 10/15

サンプルのダウンロード → API_SetPriorityClass.lzh(k)

サンプルプログラムのスクリーンショット

全ソースコード



OpenProcess 関数
GetCurrentProcessId 関数
SetPriorityClass 関数

    対応しているバージョン
    95, 98, Me, NT3.1以降, 200, XP

    使用するヘッダとライブラリ
    winuser.h
    kernel32.lib
起動しているアプリケーションの情報を調べる で説明していますが ウィンドウズ上で実行しているアプリケーションには、全て優先順位が つけられています。 この優先順位が高いほど、OSであるウィンドウズが集中的に処理を行うので アプリケーションの動作が通常よりも速くなります。 DirectX を使わずにアクションゲームを作る場合などに威力を発揮すると 思いますが、この処理に頼る前に徹底的にプログラム自体のアルゴリズムを 改善しておいた方がよいかと思います。 画像の描画ルーチンにMMX命令を使ったアセンブラを使ってみるとか どこかにムダな処理をしている部分はないかとか、見直せばいくらでも 発見できると思います。 それでも「自分の力ではこれ以上はムリ」と判断した時の切り札として とっておくくらいの気持ちで使うことをお勧めしたいです。 優先順位を変更するには SetPriorityClass() 関数を使います。 この関数には引数としてプロセスオブジェクトのハンドルが必要なので それを OpenProcess() 関数で取得しておきます。 プロセスオブジェクト〜?といわれてもピンと来ないのですが とりあえず OpenProcess() を使えば取ってこれるからヨシと・・・。 注意することは、優先順位を最高にするとメッセージの割り込みすら 許さなくなるので、ウィンドウズのメッセージに依存するような プログラムは組めなくなります。 一昔前の手続き型のDOSプログラムみたいな感じでないと、全く 動きません。 優先順位を最高にした場合は、全画面表示のみで、キー入力やマウスの カーソル位置を得るにもメッセージを使わないで処理しないといけません。 プログラム起動中に他のアプリケーションにフォーカスを移すことも できません。 現実的に考えると、優先順位は高( HIGH_PRIORITY_CLASS )までしか 設定できません。

| home |