我正在为名为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);
}
答案 0 :(得分:0)
为了使SetTimer工作,应用程序应该运行“message pump”循环(GetMessage()
/ DispatchMessage()
)。没有它,WM_TIMER消息将不会被传递,因此您的TimerProc将不会被调用。
请改用CreateTimerQueueTimer()
。