当前位置: 首页>>代码示例>>C#>>正文


C# IProcess.WaitForExit方法代码示例

本文整理汇总了C#中IProcess.WaitForExit方法的典型用法代码示例。如果您正苦于以下问题:C# IProcess.WaitForExit方法的具体用法?C# IProcess.WaitForExit怎么用?C# IProcess.WaitForExit使用的例子?那么恭喜您, 这里精选的方法代码示例或许可以为您提供帮助。您也可以进一步了解该方法所在IProcess的用法示例。


在下文中一共展示了IProcess.WaitForExit方法的2个代码示例,这些例子默认根据受欢迎程度排序。您可以为喜欢或者感觉有用的代码点赞,您的评价将有助于系统推荐出更棒的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();
        }
开发者ID:albertjan,项目名称:kudu,代码行数:58,代码来源:IdleManager.cs

示例2: ExecuteEngine

        protected IEnumerable<BuildResult> ExecuteEngine(IProcess process)
        {
            process.Start();
            var reader = process.StandardOutput;

            while (!reader.EndOfStream)
            {
                var line = reader.ReadLine();
                var parsed = FileBuildParser.Parse(line);
                if (parsed.Count() > 0)
                    foreach (var m in parsed)
                        yield return m;
                else
                    yield return new TextBuildResult(line);
            }
            process.WaitForExit();
            if (process.ExitCode != 0)
                yield return new ErrorBuildResult();
        }
开发者ID:modulexcite,项目名称:openwrap,代码行数:19,代码来源:AbstractProcessPackageBuilder.cs


注:本文中的IProcess.WaitForExit方法示例由纯净天空整理自Github/MSDocs等开源代码及文档管理平台,相关代码片段筛选自各路编程大神贡献的开源项目,源码版权归原作者所有,传播和使用请参考对应项目的License;未经允许,请勿转载。