【C++】セマフォとプロセスの使い方
【C++】セマフォとプロセスの使い方
WindowsXPでVC++2008コンパイラを使用して、
プロセスとセマフォについて勉強しています。
外部プログラム(今回は電卓として)を5つ立ち上げるのですが、
同時に立ち上げるのは2つまでとしたい場合、どのように組むのでしょうか。
http://nienie.com/~masapico/api_CreateSemaphore.html
こちらにスレッドを使用したセマフォを使ったサンプルがあるのでが、
プロセスを使うとなると、うまく書けません。
ご指導頂けませんでしょうか。
===現在まで書いたソース===
(5つのプロセスをつくるループも実装していませんが、、、)
#include<windows.h>
#include<stdio.h>
#include<tchar.h>
HANDLE g_hSemaphre;
void main(){
BOOL bRet;
STARTUPINFO si;
PROCESS_INFORMATION pi;
//Semaphoreオブジェクト
g_hSemaphre = CreateSemaphore(NULL,2,2,NULL);
bRet = CreateProcess(_T("C:\\WINDOWS\\system32\\calc.exe"),
_T(""),
NULL,
NULL,
FALSE,
0,
NULL,
NULL,
&si,
&pi);
//プロセス終了
WaitForSingleObject(pi.hProcess,INFINITE);
//後処理(プロセス開放)
ReleaseSemaphore(g_hSemaphre,1,NULL);
//スレッドとプロセスを閉じる。
CloseHandle(pi.hThread);
CloseHandle(pi.hProcess);
//Semaphoreオブジェクト
CloseHandle(g_hSemaphre);
}
お礼
内容が難しくてあんまり分かりませんでしたが知りたかったことはかなり分かりました。 ウインドウオブジェクトの変更はハンドルを使うけど、別プロセスのウインドウオブジェクトに触れる時は、ハンドルよりもグローバルな識別子を使って目的のウインドウオブジェクトか確認してからハンドルを使ってウインドに触れるんですよね。 CreateProcessの継承は、プロセスのハンドルのスコープの幅に関するもので、オブジェクトの性質を継承するようなJAVA感覚の継承とは違う内容のようですね。 ありがとうございました。