我可以在控制台 C 应用程序中使用 SetTimer() API 吗?

新手上路,请多包涵

我有一个控制台应用程序正在使用一个 DLL 文件,该文件使用 SetTimer() 调用来创建一个计时器并在其内部触发一个函数。电话如下:

 SetTimer((HWND)NULL, 0, timer_num, (TIMERPROC)UnSyncMsgTimer)) == 0)

它期望接收计时器消息,但这永远不会发生。我假设因为我的是一个控制台应用程序,而不是一个标准的 Windows GUI 应用程序(就像最初使用 DLL 文件的地方)。这会使 DLL 文件功能的关键部分停止工作。

我的应用程序需要保持控制台应用程序,并且我无法更改 DLL。

是否有解决方法来完成这项工作?

原文由 JallenA1 发布,翻译遵循 CC BY-SA 4.0 许可协议

阅读 458
1 个回答

您可以使用 CreateTimerQueueTimer 函数

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;
}

原文由 Marx Yu 发布,翻译遵循 CC BY-SA 3.0 许可协议

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题