カクタスソフトウェア
カクタスソフトウェア
サウンド MIDI マルチメディア アプリケーション

サブスレッドによるポーリング手法(簡易バージョン)

このセクションではサブスレッドを用いて定期的にサービスを実施する手法を紹介します。

スレッドの起動

CreateThread()関数を用いて作業用スレッドを生成します。3番目のパラメータにスレッドの開始アドレス。4番目にスレッドを管理する親クラス。6番目にスレッド識別IDへのポインターを指定します。その他のパラメータは今回使用しません。スレッドの起動に成功するとハンドルが戻ります。

スレッド終了の合図にm_runフラグを用いています。スレッドを作成する前にフラグをTRUEにしておきます。

void EventThread::BeginThread(void)
{
    m_run = TRUE;
    m_hThread = CreateThread(NULL, 0, EventFunc, this, 0, &m_dwThrdAddr);
}

スレッド関数

スレッド関数はスタティックでなければなりません。スレッド関数では親クラスのm_runフラグがTRUEの間whileループを実行します。サービス関数はSleep()でタイミングを取りながら定期的に呼び出します。

DWORD WINAPI EventFunc(LPVOID pContext)
{
    EventThread* pThread = (EventThread*)pContext;

    while (pThread->m_run)
    {
        pThread->Notification();
        Sleep(500);
    }
    return 0;
}

作業スレッドの終了

m_runをFALSEにし永久ループから抜けるようにします。スレッドが終了したらスレッドハンドルをクローズします。

void EventThread::TermThread(void)
{
    m_run = FALSE;
    WaitForSingleObject(m_hThread, 3000);
    CloseHandle(m_hThread);
}

ドキュメントの先頭へ

カクタスソフトウェア 技術協力 資料室 資料室の広場 SourceForge.jp お問い合わせ