dll文件中的SetTimer函数

时间:2013-02-03 11:13:39

标签: c++ plugins dll

我正在为名为MusicBee的音乐播放器编写一个插件。 该插件适用于Logitech G键盘LCD。 现在我将每隔30ms看一次按钮活动,因此按下按钮时速度很快。 我将使用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);
}

1 个答案:

答案 0 :(得分:0)

为了使SetTimer工作,应用程序应该运行“message pump”循环(GetMessage() / DispatchMessage())。没有它,WM_TIMER消息将不会被传递,因此您的TimerProc将不会被调用。

请改用CreateTimerQueueTimer()