如何判断一个进程是否还有响应?类似Task Manager中的“Not Responding”状态是如何捕获到的?

zpplayer 2003-11-19 02:37:39
如题
...全文
92 6 打赏 收藏 转发到动态 举报
写回复
用AI写文章
6 条回复
切换为时间正序
请发表友善的回复…
发表回复
NowCan 2003-11-19
  • 打赏
  • 举报
回复
如何判断一个应用程序没有响应了呢?下面这是来自MSDN的方法,原理是发一个消息到窗口,如果在指定时间(本例是1000ms)内这个消息得不到处理就认为没有响应。

Const SMTO_BLOCK = &H1
Const SMTO_ABORTIFHUNG = &H2
Const WM_NULL = &H0
Const WM_CLOSE = &H10
Dim lngResult As Long
Dim lngReturnValue As Long
lngReturnValue = SendMessageTimeout(hWnd, WM_NULL, 0&, 0&, SMTO_ABORTIFHUNG And SMTO_BLOCK, 1000, lngResult)
If lngReturnValue Then
MsgBox "Responding"
Else
MsgBox "Not Responding","Block tester"
End If


需要说明的是,这实际上是判断一个窗口是否停止响应,如果应用程序有多个窗口,就可能出现某些窗口停止响应而另一些窗口正常的情况。这是正常现象。

另外,在USER32.DLL里有个未见文档的函数IsHungAppWindow,也是用来判断窗口是否没有响应的。它的原型是
BOOL IsHungAppWindow(HWND hWnd)

http://nowcan.yeah.net
孤必有邻 2003-11-19
  • 打赏
  • 举报
回复
是不是向其发送某些无影响的消息,然后读其消息队列,看是否已被处理,如果没有被处理,显然是其不再响应消息。
osborn 2003-11-19
  • 打赏
  • 举报
回复
"结束任务"按钮sendmessage wm_close消息,我想如果几秒后它没有返回,那么可以认为没有响应了吧?
zpplayer 2003-11-19
  • 打赏
  • 举报
回复
up
zpplayer 2003-11-19
  • 打赏
  • 举报
回复
up
zpplayer 2003-11-19
  • 打赏
  • 举报
回复
up

15,471

社区成员

发帖
与我相关
我的任务
社区描述
VC/MFC 进程/线程/DLL
社区管理员
  • 进程/线程/DLL社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧