セマフォを使う




今回はセマフォを使用してみます。
サンプルとしてボタンをクリックしたら、セマフォのロックと解除を行うプログラムを作成 してみます。

(サンプル:SEM01View.h)
// 生成されたメッセージ マップ関数
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つ、アドレス型で宣言します。


次に実際の処理を記述します。
処理を記述する前に画面にボタンを4つ作成して、それぞれに、セマフォの生成・セマフォのロック・ セマフォの解除・セマフォの削除を割り当てます。
(サンプル:SEM01View.cpp)
/////////////////////////////////////////////////////////////////////////////
// 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つ起動して、セマフォがかかるかどうか遊んでみて下さい。





N総研ソフトウェア開発部のTOPに戻る。

このページに関するご意見・質問は
ドンタコスN村 E-mail:se3w-nkmr@asahi-net.or.jp
まで送信してください。