0

MusicBee という名前の音楽プレーヤー用のプラグインを作成しています。プラグインは Logitech G キーボード LCD 用です。ここで、30 ミリ秒ごとにボタンのアクティビティを確認するので、ボタンを押すとすべてが高速になります。windows.h の setTimer 関数を使用しますが、dll ファイルで機能させることができません。誰かがこの小さな問題で私を助けることができますか??

私が持っているコードは次のとおりです(TimerProc関数は静的関数です):

Logitech * Logitech::LogitechObject;

Logitech::Logitech():   stopthread(false), firstTime(true), position(0), duration(0)
{
    LogitechObject = this;

    SetTimer(NULL, 1, 30, &Logitech::TimerProc);
}

Logitech::~Logitech()
{
    stopthread = true;
    this->state = StatePlay::Undefined;
    timerThread.detach();
}

VOID CALLBACK Logitech::TimerProc(HWND hwnd, UINT uMsg, UINT_PTR idEvent,  DWORD dwTime)
{
    LogitechObject->time = 0;
    LogitechObject->m_lcd.SetProgressBarPosition(LogitechObject->progressbar, static_cast<FLOAT>(100));
    LogitechObject->m_lcd.Update();

    SetTimer(NULL, 1, 30, &Logitech::TimerProc);
}
4

1 に答える 1

0

SetTimerが機能するためには、アプリケーションは「メッセージポンプ」ループ(GetMessage()/ DispatchMessage())を実行する必要があります。これがないと、WM_TIMERメッセージが配信されないため、TimerProcは呼び出されません。

CreateTimerQueueTimer()代わりに使用してください。

于 2013-02-03T17:11:53.427 に答える