【发布时间】:2018-07-09 17:54:34
【问题描述】:
我的应用程序是一个为操作系统电源事件注册的 Win32 服务。当应用程序获取事件回调时,根据电源事件的类型执行操作。在挂起/睡眠事件期间,我们的应用程序会在确认操作系统继续挂起操作之前的 10 秒内尝试执行特定的网络作业。
在正常情况下,我的应用程序会在 10 秒内成功完成工作。但有时,操作耗时过长,无法在 10 秒内完成。应用程序使用各种 Win32 API 函数,我想检查导致延迟的特定操作。当系统要挂起时,是否有任何方法可以捕获在完成作业时挂起的进程转储?
我尝试过 ProcMon、ProcExplorer、ProcDump,但没有帮助。除了在代码中添加日志之外,关于解决问题的任何想法。谢谢。
【问题讨论】:
-
您可以在程序中使用假电源事件(这样系统就不会进入睡眠状态),然后使用正常的调试方法来查看它卡在哪里。
-
因为它是网络相关的应用程序,操作系统可能会使用套接字、QOS 服务等做其他事情,不确定是否允许代码通过睡眠动作流动(即使操作系统实际上并没有进入睡眠状态)会有帮助的。
-
在代码中添加日志听起来不错。你觉得你需要多少?毕竟,当你,咳咳,拿你的转储时,捕捉当前正在执行的任何事情可能不会告诉你太多 - 也许致命的延迟更早,然后在地毯被拉出之前还有几毫秒可以做更多的事情在你之下。所以,也许不是延迟,而是延迟。
标签: c++ windows events service suspend