【发布时间】:2010-05-21 11:33:25
【问题描述】:
我正在开发一个简单的 WinAPI 应用程序,并从编写自己的断言系统开始。
我定义了一个类似ASSERT(X) 的宏,它的作用与assert(X) 完全相同,但包含更多信息、更多选项等。
在某个时刻(当该断言系统已经运行和工作时)我意识到存在问题。
假设我编写了一个使用计时器执行某些操作的代码,并且(只是一个简单的示例)该操作是在处理WM_TIMER 消息时完成的。而现在,情况改变了这段代码开始抛出断言的方式。此断言消息将每TIMER_RESOLUTION 毫秒显示一次,并且只会淹没屏幕。
解决这种情况的选项可能是:
1) 显示断言消息框时完全暂停应用程序运行(也可能暂停所有线程)并在关闭后继续运行
2) 为显示的断言创建一个静态计数器,当其中一个断言已经显示时不显示断言(但这不会暂停应用程序)
3) 对类似的断言进行分组,并为每种断言类型仅显示一个(但这也不会暂停应用程序)
4) 修改应用程序代码(例如,Get / Translate / Dispatch 消息循环),使其在有任何断言时自行挂起。这很好,但不是通用的,看起来像一个 hack。
在我看来,选项 1 是最好的。但我不知道如何实现这一点。我正在寻找的是一种暂停运行时的方法(类似于调试器中的Pause 按钮)。有人知道如何实现吗?
另外,如果有人知道解决此问题的有效方法 - 我将非常感谢您的帮助。谢谢。
【问题讨论】:
-
如果您暂停进程/线程,用户将如何关闭消息对话框?
-
我不知道 :) 但我认为应该有一种方法可以暂停除该消息对话框之外的所有内容
-
assert(x)如何处理问题? -
实际上,它失败了并且还绘制了大量的断言对话框。但我希望有办法获得我所期望的行为。