プロセス実行時間測定 その2

コマンドライン引数の取得

まずコマンドライン引数をどうやって取ってくるか?という話。普通のCプログラムであればmain(int argc, char **arvg)のようにmain関数の引数に自動的に*1入ってくるけど、Windowsプログラミングではどうなるかと言うとWinMainの第3引数に入ってくるらしい。

int WINAPI WinMain(
  HINSTANCE hInstance,      // 現在のインスタンスのハンドル
  HINSTANCE hPrevInstance,  // 以前のインスタンスのハンドル
  LPSTR lpCmdLine,          // コマンドライン
  int nCmdShow              // 表示状態
);

lpCmdLine
アプリケーションのコマンドラインが格納された NULL で終わる文字列へのポインタが入ります。プログラム名は含まれません。コマンドライン全体を取り出すには、GetCommandLine 関数を使ってください。

Microsoft API and Reference Catalog

引数は分割されずに、スペースで区切られた単一の文字列文字列として入ってくるので、そこから引数をトークンに分けていくのは別途処理が必要っぽい。でもまあ、今回は第一引数さえ使えればいいので細かいことは考えないことにする。

プロセス起動

UNIXならfork()してexec()するだけなのですが、WindowsではCreateProcess()というAPIで新規プロセスを作るらしい。UNIXでいうforkってできないのかしら?まあ、今回の話とは関係ないのであまり細かいことは考えないようにする(またか)。

などを参考に。

*1:コンパイラーが生成したprologで?