セマフォを使う
// 生成されたメッセージ マップ関数 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つ起動して、セマフォがかかるかどうか遊んでみて下さい。