当前位置:编程学习 > C#/ASP.NET >>

如何检测进程为响应

如何才能得知一个进程未响应了呢?这里先谢谢了。 --------------------编程问答-------------------- 一个有窗口的进程,是可以估计它是否响应。

就像Vista下的DWM(Desktop Windows Management)的做法 - 它给窗口线程发消息,如果发现5秒钟内没有回音,它就认为该窗口线程未响应。

你可模仿该做法。
先得到该进程的主窗口(假定该进程只有一个窗口线程);
用SendMessageTimeout API给他发空消息(WM_NULL);
如果超时,则认为该进程未响应 --------------------编程问答--------------------
引用 1 楼 gomoku 的回复:
一个有窗口的进程,是可以估计它是否响应。

就像Vista下的DWM(Desktop Windows Management)的做法 - 它给窗口线程发消息,如果发现5秒钟内没有回音,它就认为该窗口线程未响应。

你可模仿该做法。
先得到该进程的主窗口(假定该进程只有一个窗口线程);
用SendMessageTimeout API给他发空消息(WM_NULL);
如果超时,则认为该进程未响应


那如果进程处于假死状态呢?比如:在主线程中处理大量的数据; --------------------编程问答-------------------- 那需要使用多线程,另外开一个线程处理数据,保证主线程能响应消息 --------------------编程问答--------------------
引用 2 楼 lianshaohua 的回复:
引用 1 楼 gomoku 的回复:
一个有窗口的进程,是可以估计它是否响应。

就像Vista下的DWM(Desktop Windows Management)的做法 - 它给窗口线程发消息,如果发现5秒钟内没有回音,它就认为该窗口线程未响应。

你可模仿该做法。
先得到该进程的主窗口(假定该进程只有一个窗口线程);
用SendMessageTimeout API给他发空消息(WM_NULL);
如果超时,则认为该进程未响应


那如果进程处于假死状态呢?比如:在主线程中处理大量的数据;
假死就是不响应咯...
另外这方法仅限于有窗体的进程. --------------------编程问答-------------------- 可以用win32API GetMessage或者是PeekMessage   去查进程的阻塞状态 --------------------编程问答-------------------- 关注 --------------------编程问答-------------------- Process..::.Responding Property 
Gets a value indicating whether the user interface of the process is responding.


Namespace:  System.Diagnostics
Assembly:  System (in System.dll)

C# 
public bool Responding { get; }  --------------------编程问答--------------------
引用 7 楼 alonesword 的回复:
Process.Responding Property
Gets a value indicating whether the user interface of the process is responding.

Namespace:  System.Diagnostics
Assembly:  System (in System.dll)

public bool Responding { get; }

这个更简单 - Process类已经提供这个功能了:)
要注意如果该Process没有窗口,Responding将一直返回true。 --------------------编程问答-------------------- MARK --------------------编程问答-------------------- 关注 --------------------编程问答-------------------- 无窗体的进程怎么判断呢? --------------------编程问答--------------------
引用 11 楼 sxmonsy 的回复:
无窗体的进程怎么判断呢?

无窗体的进程没有正常的人机交互界面,没有交互,又何所谓响应呢?

Windows服务则用另外一种状态检查,它们要响应SERVICE_CONTROL_INTERROGATE调查。
补充:.NET技术 ,  C#
CopyRight © 2012 站长网 编程知识问答 www.zzzyk.com All Rights Reserved
部份技术文章来自网络,