-3

我正在使用 C++ Builder 使用 C++ 构建的软件,该软件每月冻结一次。我正在查看代码,但它太大而无法找到。冻结使 UI 变得全白。我试图用一些提议的错误代码(空指针、while(1) 和这种东西)来模拟这个错误,但从来没有得到相同的空白 UI。当它停止时,我运行了一个What's Hang,但我什么也没有。有人知道我下次可以做些什么来获得更多信息,这可以帮助我找到冻结的原因吗?

4

1 回答 1

1

当 UI 绘制消息排队但未处理时,通常会出现空白(白色)UI。如果您不首先在 UI 中执行某些操作来触发重绘,那么仅仅阻止消息队列处理新消息是不够的。

至于解决原始问题 - 您应该在主线程中查找运行 longs 循环而不处理新消息的任何代码,或者使用WaitForSingleObject()WaitForMultipleOBjects()代替对未及时终止的线程的MsgWaitForMultipleObjects()调用长时间等待可等待对象TThread::WaitFor(), ETC。

如果不知道用户执行了哪些步骤导致 UI 冻结,因此很难解决此类问题,因此您知道要开始查看哪些代码。

于 2013-10-05T00:31:05.500 回答