每个循环可能会或可能不会运行 CDialog 的无限线程

Posted

技术标签:

【中文标题】每个循环可能会或可能不会运行 CDialog 的无限线程【英文标题】:Infinite Thread that may or may not run a CDialog each loop 【发布时间】:2010-09-13 18:34:21 【问题描述】:

我正在处理一个 MFC 项目,我需要一个单独的循环,该循环将连续运行或每隔几秒运行一次,并且每次它可能需要也可能不需要运行对话框来获取用户的一些输入。我正在考虑使用 AfxBeginThread,但从我所读到的内容来看,它并不能真正用于连续循环。

【问题讨论】:

【参考方案1】:

不要这样做。您不能只在工作线程中撕掉对话框。它们只能在主线程中启动,因为它们需要消息泵才能运行。

如果您想要的只是每隔几秒触发一次的某种信号,那么您想要的是timer。为你想要的定时器周期设置定时器,当你的主线程处理了想要的 WM_TIMER 消息时,你可以弹出一个对话框,做你的事情。

如果您希望您的工作线程做一些工作,这可能包括或可能不包括向用户询问信息,那么您需要考虑让您的线程使用PostMessage() 向主线程发送消息,通过向用户询问数据来处理该消息在主线程中,然后将带有输入数据的信号发送回工作线程。完成最后一点的一种方法是从主线程调用QueueUserAPC(),并使用工作线程的句柄和一个指向对新输入的数据执行某些操作的函数的指针。

【讨论】:

感谢计时器正是我想要的!

以上是关于每个循环可能会或可能不会运行 CDialog 的无限线程的主要内容,如果未能解决你的问题,请参考以下文章

正则表达式替换可能会或可能不会被引用的字符串

避免 ORA-00904 - 在 java 中进行 sql 查询时出现无效标识符错误,因为该列可能会或可能不会在数据库中预设

而循环性能取决于单独的过程

Mac OS X 上的异步应用程序间通信

time.sleep(..)的准确性会更改并影响循环性能,具体取决于是否正在运行其他进程

从 PDF 中提取绘图