DLLを介した同期処理

[戻る]
Niit 2009/12/10(木) 12:35:58
このようなDLLを作成してメインアプリとサブアプリの同期を処理をしようと
しているのですが

extern "C"
{
__declspec(dllexport) void test();
__declspec(dllexport) void Initialize_dll( void (*pFunc)());
__declspec(dllexport) void End_dll();
__declspec(dllexport) void SetBreak(bool b);
}

#pragma comment(linker,"/section:my_shared,rws")
#pragma data_seg ("my_shared")
    bool bBlock = false;
    CEvent* pEvent = NULL;
#pragma data_seg()

///////////////////////////////////////
//    メインアプリが呼ぶ
void test()
{
    if(bBlock == true)
    {
        WaitForSingleObject(*pEvent, INFINITE);    //    block.
        ///////////    何か処理する
        
    }
}

///////////////////////////////////////
//    メインアプリが呼ぶ
void Initialize_dll( void (*pFunc)())
{
    pEvent = new CEvent(0, true, L"lockevent");
}

///////////////////////////////////////
//    メインアプリが呼ぶ
void End_dll()
{
    if(pEvent)
    {
        delete pEvent;
    }
}

///////////////////////////////////////
//    サブアプリが呼ぶ
void SetBreak(bool b)
{
    if(pEvent == NULL)
        return;
    
    bBlock = b;
    if(b == false)
    {    //    release.
        pEvent->SetEvent();
    }
    else
    {    //    block.
        pEvent->ResetEvent();
    }
}

サブアプリからイベントを解除してもメインアプリが復帰せずに困っています
環境はXP,VS2008です。よろしくお願い致します。

aetos 2009/12/10(木) 13:22:26
pEvent はサブアプリから見たときに何の意味もないただの数字でしかないのでは。
イベントは共有セクションに置かず、名前を付けて互いに Open すればよいのではない
でしょうか。

Niit 2009/12/10(木) 13:59:29
[[解決]]
>>aetosさん
ありがとうございます。
共有セクションに置かない名前付イベントを使用したら1発で解決できました!

古いスレッドには追加発言できません。