セマフォを使う
// 生成されたメッセージ マップ関数
protected:
//{{AFX_MSG(CSEM01View)
afx_msg void OnButton1();
afx_msg void OnButton2();
afx_msg void OnButton3();
afx_msg void OnButton4();
afx_msg void OnButton5();
afx_msg void OnButton6();
//}}AFX_MSG
DECLARE_MESSAGE_MAP()
private:
CSemaphore *ExcTblSem;
CSingleLock *sgllock;
};まずは、ヘッダにクラスを2つ、アドレス型で宣言します。
/////////////////////////////////////////////////////////////////////////////
// CSEM01View クラスのメッセージ ハンドラ
void CSEM01View::OnButton1()
{
// TODO: この位置にコントロール通知ハンドラ用のコードを追加してください
// セマフォを作成する
ExcTblSem = new CSemaphore( 1, 1, "dontacos" );
sgllock = new CSingleLock( ExcTblSem, FALSE );
AfxMessageBox("Creat");
}
void CSEM01View::OnButton2()
{
// TODO: この位置にコントロール通知ハンドラ用のコードを追加してください
sgllock->Lock( );
AfxMessageBox("LOCKED");
}
void CSEM01View::OnButton3()
{
// TODO: この位置にコントロール通知ハンドラ用のコードを追加してください
sgllock->Unlock( );
AfxMessageBox("FREE");
}
void CSEM01View::OnButton4()
{
// TODO: この位置にコントロール通知ハンドラ用のコードを追加してください
delete ExcTblSem;
delete sgllock;
AfxMessageBox("DELETE");
}
これで、同一プロセスを2つ起動して、セマフォがかかるかどうか遊んでみて下さい。