我试图找出进程何时停止工作。我一直在尝试使用此代码,但它没有注意到程序仍在运行并处理文件。可能是因为它仍在做一些不到一微秒的事情:
TimeSpan startTime = m_Process.TotalProcessorTime;
int idleCycles = 0;
int iMax = Math.Max(iMinNoActivityTime/100, 5);
while (idleCycles < iMax)
{
Sleep(100);
TimeSpan curTime = m_Process.TotalProcessorTime;
int delta = curTime.Subtract(startTime).Milliseconds;
if (delta != 0)
{
idleCycles = 0;
}
else
{
idleCycles++;
}
startTime = curTime;
}
它需要3000秒:连续30个100毫秒的时间块,没有处理器活动。
有没有办法做到这一点,所以当它仍在运行时它不会看到空转?该进程读取文件,删除它然后处理它,以便它不能监视目录。
答案 0 :(得分:1)
我会回去看看你的设计。试图发现另一个进程何时处于空闲状态似乎不是一个非常可靠的方法。
为什么不让其他进程使用命名事件来发出信号呢?
答案 1 :(得分:1)
如果您知道正在主(UI)线程上完成工作,例如对于简单的控制台应用程序,则可以使用Process.WaitForInputIdle。如果您只想轮询,可以选择指定超时参数。现在,如果工作是在后台线程上完成的,那么你将无法检测到它(至少在不诉诸一些讨厌的黑客攻击的情况下)。正如格雷厄姆指出的那样,在这种情况下重新考虑设计肯定会更好。