代码之家  ›  专栏  ›  技术社区  ›  Paul-Jan

在windows进程的主线程中睡眠总是一件坏事吗

  •  2
  • Paul-Jan  · 技术社区  · 8 年前

    我正在调查一个(基于统一的)应用程序与 AppHangB1 事件,需要手动终止。不幸的是,该应用程序应该在无人值守的设置中连续运行超过12小时。

    我们成功地创建了一个。使用DebugDiag将dmp文件从其“挂起”状态中删除,现在正在尝试理解其内容。我首先想到的是:

    Main thread sleeping

    在我看来,主线是 睡觉 . 在我的书中,一个主线程永远不应该做的事情,因为它会阻止应用程序响应windows消息。我认为这可能是AppHangB1的直接原因。

    如果有人能证实这个假设是否普遍正确,如果没有,为什么,那就太好了!

    额外信息:内存使用和进程的句柄计数是稳定的。当然,我们欢迎就如何解决这个特定问题提出一般和具体的建议,但为了让这个问题保持主题化,我只想把重点放在我们在这里看到的主线中的睡眠。

    1 回复  |  直到 8 年前
        1
  •  0
  •   Paul-Jan    8 年前

    我不想让这个问题悬而未决,所以这是我的看法。如果更多有学问的人能给出任何其他答案,我很乐意用它们来代替。

    • 不,在主线程上睡觉不一定是坏事 . Windows“应用程序挂起”检测的时间限制为5秒,因为各种原因,有很多代码会进行微睡眠。其中之一是0毫秒睡眠,只会放弃时间片。
    • 然而 ,如果多个AppHang崩溃转储显示主线程处于完全相同的睡眠状态,则这可能是一个问题的有力指示器。

    在这种特殊情况下,抑郁总是表现为内心的睡眠 msmpeg2vdec。dll ,我们用于视频播放的流行AVPro插件使用的Windows MPEG2视频编解码器。我们为所有视频切换了视频格式, 现在应用程序不再挂起 .