マルチスレッド・ライブラリーは,複数のプロセスを扱うためのルーチンをいくつか用意しています。アプリケーションは,固有なアドレス空間と固有なリソースを必要とする関数のために,その活動を他のスレッドから守るために複数のプロセスを使うことができます。ただし,次のような理由から,通常は複数のプロセスを作成するよりも,1 つのプロセス中で複数のスレッドを作成することでマルチタスク化を実装する方が効率的です。
システムは,プロセスの作成よりも,スレッドの作成と実行の方を高速に行えます。これは,スレッドのためのコードがすでにプロセスのアドレス空間にマップされているのに対し,新しいプロセスの場合にはそのコードをロードしなければならないからです。
1 つのプロセスの全スレッドは,同じアドレス空間を共有し,プロセスの大域変数を参照するので,スレッド間の通信が単純化されます。
1 つのプロセスの全スレッドは,ファイルやパイプなどのリソースへの開かれたハンドルを使用することができます。
現在のプロセスと並行して実行される独立したプロセスを作成したい場合,CreateProcess を使用します。CreateProcess は,そのプロセスが終了するまで有効な 32 ビットのプロセス識別子を返します。ExitProcess はプロセスを停止し,すべての DLL に対してプロセスが終了しつつあることを通知します。
複数のプロセスからミューテックス,イベント,およびセマフォを共有することができます (ただしクリティカル・セクションは共有できません)。また,プロセスは,オプションとして,自分を作成したプロセスからハンドルを継承することができます (オンライン・ヘルプの CreateProcess を参照)。
現在のプロセスに関する情報は,GetCurrentProcess (プロセス自身の疑似ハンドルを返す) と GetCurrentProcessId (プロセス識別子を返す) を呼び出すことで取得できます。これらの関数が返した値は,他のプロセスと通信するための呼び出しに使用できます。GetExitCodeProcess は,プロセスの終了コードか,まだ実行中であることを示す値を返します。
OpenProcess 関数は,プロセス識別子で指定されたプロセスへのハンドルを開きます。OpenProcess では,ハンドルのアクセス権と継承可能性を指定することができます。
プロセスは次のいずれかが起こったときに終了します。
プロセスのいずれかのスレッドが ExitProcess を呼び出した。
プロセスのプライマリ・スレッドが返った。
プロセスの最後のスレッドが終了した。
プロセスへのハンドルを指定して TerminateProcess が呼び出された。
プロセスを終了する手段としては,添付されているすべての DLL に終了することを通知し,プロセスのすべてのスレッドを確実に終了させる ExitProcess が推奨されます。TerminateProcess を呼び出した場合,DLL に対する通知は行われません。