Jal*_*nA1 8 c++ windows console timer
我有一个控制台应用程序正在使用DLL文件,该文件使用一个SetTimer()调用来创建一个计时器并在其自身内部启动一个函数.电话如下:
SetTimer((HWND)NULL, 0, timer_num, (TIMERPROC)UnSyncMsgTimer)) == 0)
Run Code Online (Sandbox Code Playgroud)
期待接收定时器消息,但这种情况永远不会发生.我假设因为我的是一个控制台应用程序而不是标准的Windows GUI应用程序(就像最初使用DLL文件的地方一样).这将阻止DLL文件功能的关键部分工作.
我的应用程序需要保留一个控制台应用程序,我无法更改DLL.
是否有工作要做到这一点?
HANDLE timer_handle_;
CreateTimerQueueTimer(&timer_handle_, NULL, TimerProc, user_object_ptr, 10, 0, WT_EXECUTEDEFAULT);
//callback
void TimerProc(PVOID lpParameter, BOOLEAN TimerOrWaitFired)
{
user_object* mgr = (user_object*) lpParameter;
mgr->do();
DeleteTimerQueueTimer(NULL, timer_handle_, NULL);
timer_handle_ = NULL;
}
Run Code Online (Sandbox Code Playgroud)
看一下下面的示例,它展示了如何在控制台应用程序中使用 WM_TIMER 消息:
(归功于简单示例网站)
#define STRICT 1
#include <windows.h>
#include <iostream.h>
VOID CALLBACK TimerProc(HWND hWnd, UINT nMsg, UINT nIDEvent, DWORD dwTime) {
cout << "Time: " << dwTime << '\n';
cout.flush();
}
int main(int argc, char *argv[], char *envp[]) {
int Counter=0;
MSG Msg;
UINT TimerId = SetTimer(NULL, 0, 500, &TimerProc);
cout << "TimerId: " << TimerId << '\n';
if (!TimerId)
return 16;
while (GetMessage(&Msg, NULL, 0, 0)) {
++Counter;
if (Msg.message == WM_TIMER)
cout << "Counter: " << Counter << "; timer message\n";
else
cout << "Counter: " << Counter << "; message: " << Msg.message << '\n';
DispatchMessage(&Msg);
}
KillTimer(NULL, TimerId);
return 0;
}
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
21710 次 |
| 最近记录: |