Process как сосчитать - C#

Узнай цену своей работы

Формулировка задачи:

Есть 2 функции
        
public void cmd(String command)
        {
 
            System.Diagnostics.ProcessStartInfo procStartInfo =
            new System.Diagnostics.ProcessStartInfo("cmd", "/C " + command);
 
            System.Diagnostics.Process proc = new System.Diagnostics.Process();
            proc.StartInfo = procStartInfo;
            proc.Start();
        }
 
 public void func(String command)
        {
 
           while(true)
             {
 
                 cmd("какая то команда");
 
             }
        }
Как сделать чтобы функция func, ждала пока не выполнится до конца хотя бы один из запущенных proc, если их уже запущено 5 штук и после того как до конца отработает хотя бы один из запущенных proc, снова совершала вызов cmd?

Решение задачи: «Process как сосчитать»

textual
Листинг программы
using System.Diagnostics;
using Microsoft.Win32.SafeHandles;
 
const int MAX_COMMANDS = 5;
List<Process> _runningProcs = new List<Process>(MAX_COMMANDS);
 
public void cmd(String command)
{
    WaitForFreeSlot();
    
    Process proc = Process.Start("cmd", "/C " + command);
    _runningProcs.Add(proc);
}
 
private void WaitForFreeSlot()
{
    for (;;)
    {
        for (int i=_runningProcs.Count-1; i>=0; i--)
        {
            if (_runningProcs[i].HasExited)
            {
                _runningProcs[i].Dispose();
                _runningProcs.RemoveAt(i);
            }
        }
        
        if (_runningProcs.Count == MAX_COMMANDS)
        {
            var procEvents = _runningProcs.Select(p => new ManualResetEvent(true) { SafeWaitHandle = new SafeWaitHandle(p.Handle, false) }).ToArray();
            WaitHandle.WaitAny(procEvents);
            foreach (var procEvent in procEvents)
            {
                procEvent.Dispose();
            }
            continue;
        }
        
        break;
    }
}

ИИ поможет Вам:


  • решить любую задачу по программированию
  • объяснить код
  • расставить комментарии в коде
  • и т.д
Попробуйте бесплатно

Оцени полезность:

12   голосов , оценка 4.083 из 5
Похожие ответы