本文整理汇总了C#中IProcess.WaitUntilEOF方法的典型用法代码示例。如果您正苦于以下问题:C# IProcess.WaitUntilEOF方法的具体用法?C# IProcess.WaitUntilEOF怎么用?C# IProcess.WaitUntilEOF使用的例子?那么恭喜您, 这里精选的方法代码示例或许可以为您提供帮助。您也可以进一步了解该方法所在类IProcess
的用法示例。
在下文中一共展示了IProcess.WaitUntilEOF方法的1个代码示例,这些例子默认根据受欢迎程度排序。您可以为喜欢或者感觉有用的代码点赞,您的评价将有助于系统推荐出更棒的C#代码示例。
示例1: WaitForExit
internal void WaitForExit(IProcess process)
{
DateTime lastActivity = _lastActivity;
DateTime lastCpuActivity = _lastActivity;
TimeSpan previousCpuUsage = _initialCpuUsage;
while (!process.WaitForExit(TimeSpan.FromSeconds(1)))
{
// there is IO activity, continue to wait.
if (lastActivity != _lastActivity)
{
// there is io activity, reset cpu to initial
previousCpuUsage = _initialCpuUsage;
lastActivity = _lastActivity;
continue;
}
// Check how long it's been since the last IO activity
TimeSpan idleTime = DateTime.UtcNow - lastActivity;
// If less than the timeout, do nothing
if (idleTime < _idleTimeout) continue;
// Write progress to prevent client timeouts
WriteProgress();
// There wasn't any IO activity. Check if we had any CPU activity
// Check how long it's been since the last CPU activity
TimeSpan cpuIdleTime = DateTime.UtcNow - lastCpuActivity;
// If less than the timeout, do nothing
if (cpuIdleTime < _idleTimeout) continue;
TimeSpan currentCpuUsage = process.GetTotalProcessorTime(_tracer);
_tracer.Trace("{0}: no io activity for {1:0}s, prev-cpu={2:0.000}s, current-cpu={3:0.000}s",
process.Name,
idleTime.TotalSeconds,
previousCpuUsage.TotalSeconds,
currentCpuUsage.TotalSeconds);
if (currentCpuUsage != previousCpuUsage)
{
// The process performed some compute bound operation. We'll wait for it some more
lastCpuActivity = DateTime.UtcNow;
previousCpuUsage = currentCpuUsage;
continue;
}
// It's likely that the process is idling waiting for user input. Kill it
process.Kill(_tracer);
throw CreateIdleTimeoutException(process, cpuIdleTime);
}
process.WaitUntilEOF();
}