c++ - 基于对话框的 MFC 应用程序的应用程序范围的周期性任务

标签 c++ winapi windows-mobile mfc native

在单文档界面 (SDI) 或多文档界面 (MDI) MFC 应用程序中,我在 View 中创建了一个应用程序范围的计时器。只要应用程序正在运行,计时器就会计时并触发一些周期性操作。

如何对基于对话框的 MFC 应用程序执行相同的操作?

  1. 我应该创建 Thread 的定时器(SetTimer with NULL HWND)并向其传递回调函数吗?
  2. 我应该创建工作线程吗?我在其他项目中的经验是,当我尝试显示来自非 GUI/工作线程的一些反馈 GUI 时,我需要推出我自己的“委托(delegate)”/命令模式和“委托(delegate)调用程序”/命令调用程序。工作线程将向 UI 线程发送消息 (我认为在跨线程边界处理时使用消息比直接调用函数更安全,CMIIW)。并且 UI 线程将是“委托(delegate)”/命令调用者。如果不这样做并确保窗口/对话框具有正确的父级,将导致奇怪的行为,例如应用程序突然消失在后台;显示在当前窗口/对话框后面并导致当前窗口无响应/不可点击的窗口/对话框。可能我做错了什么,但在处理线程时出现了很多问题。

有这方面的最佳实践吗?

最佳答案

计时器在基于对话框的应用程序中与 SDI 或 MDI 应用程序一样工作。 OTOH,计时器(大部分)是 16 位 Windows 的遗留物。如果您想定期执行操作,工作线程通常是更好的方法(是的,Windows Mobile 支持多线程)。

编辑:在基于对话框的应用程序中,主对话框(基本上)存在于应用程序的整个生命周期中。除非您真的需要在应用程序启动和对话框创建或对话框销毁和应用程序退出之间的毫秒数期间使用计时器,否则只需将其附加到对话框即可。否则,您可以将它附加到主窗口——MFC 创建和销毁的主窗口,即使它从未显示过。

关于c++ - 基于对话框的 MFC 应用程序的应用程序范围的周期性任务,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2159801/

相关文章:

c++ - QT C++ : Moving several labels at the same time

windows-mobile - Windows Mobile 同步错误

c++ - SDL - 鼠标输入

c++ - 从内容更改的文件夹中删除文件

c++ - Windows GDI 打印机错误 StartDocPrinter

c++ - Win32 : How to create a bordless popup window

c++ - 使用资源中的对话

windows-mobile - 紧凑框架中是否有一个事件在暂停和恢复时触发?

c# - 在 C# 中使用 Symbol Developer Kit 播放声音

C++函数返回数组