Process как сосчитать - C#
Формулировка задачи:
Есть 2 функции
Как сделать чтобы функция func, ждала пока не выполнится до конца хотя бы один из запущенных proc, если их уже запущено 5 штук и после того как до конца отработает хотя бы один из запущенных proc, снова совершала вызов cmd?
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("какая то команда"); } }
Решение задачи: «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; } }
ИИ поможет Вам:
- решить любую задачу по программированию
- объяснить код
- расставить комментарии в коде
- и т.д