0

コールバック関数を利用しようとする非常に単純なワンボタン MFC ダイアログ アプリを作成しました。アプリは準拠して正常に動作しますが、コールバック ルーチンがトリガーされることはありません。

コールバックを適切にトリガーするには、何を変更する必要がありますか?

test.zip ファイルはここからダウンロードできます (テスト アプリは VS 2003 にあり、より多くの人が試せるようになっています): http://tinyurl.com/testfile-zip

コードは CodeProject のアラーム クラスを利用し、コールバック関数は 3 秒ごとにトリガーされるようにサポートされています (渡されるコードによって決定されます)。

ありがとう!

4

1 に答える 1

2

私はあなたのコードを見てきましたが、ボタンから呼び出された関数が問題だと思います

void CTestDlg::OnBnClickedButton1()
{
    CAlarmClock clock;

    REPEAT_PARMS rp;
    ZeroMemory(&rp, sizeof(REPEAT_PARMS));

    rp.bRepeatForever = TRUE;
    rp.Type = Repeat_Interval;
    rp.ss = 3;

    clock.SetRepeatAlarm(0, 0, 0, rp, CallbackRtn);
}

これにより、関数スタックに目覚まし時計が作成されます。したがって、この CAarmclock オブジェクトは、関数の最後でその内容と共に破棄されます。

実際にコールバックを実行するのに十分な時間存在できるようにするには、それをダイアログ クラスのメンバー変数として追加して、ダイアログが存在する限り存在し、コールバックする必要があります。

このクラスを正しく使用する方法については、CAlarmclock コード プロジェクト ページのサンプル コードを参照してください。

于 2009-04-03T09:27:30.290 に答える