Форум программистов, компьютерный форум, киберфорум
C# для начинающих
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.75/4: Рейтинг темы: голосов - 4, средняя оценка - 4.75
22 / 2 / 0
Регистрация: 27.06.2013
Сообщений: 127

Process как сосчитать

11.01.2016, 15:53. Показов 938. Ответов 5
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Есть 2 функции

C#
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
        
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?
0
cpp_developer
Эксперт
20123 / 5690 / 1417
Регистрация: 09.04.2010
Сообщений: 22,546
Блог
11.01.2016, 15:53
Ответы с готовыми решениями:

Как взять title, process, process id активного окна?
Хочу в этом switch, отловить title, process, process id. У меня есть 2 функции LRESULT CALLBACK CBTProc(int nCode, WPARAM wParam, LPARAM...

[SQL Server]Transaction (Process ID 55) was deadlocked on lock resources with another process and has been chosen as the deadlock viсtim.
1С 7.7, сервер win2003, 4 клиентские машины с ХР - на одной из них все время вылетает ошибка: SQL State: 40001 Native: 1205 ...

О чем говорит ошибка "error The process cannot access the file *.tlog because it is being used by another process"?
Может кто встречался с этой ошибкой. Помогите избавиться от нее.

5
Администратор
Эксперт .NET
 Аватар для OwenGlendower
18282 / 14205 / 5368
Регистрация: 17.03.2014
Сообщений: 28,884
Записей в блоге: 1
11.01.2016, 17:52
Dathy, я бы сделал так:
C#
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
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;
    }
}
На основе WaitForFreeSlot нужно создать еще функцию которая будет очищать коллекцию _runningProcs после того как все процессы отработали.
2
22 / 2 / 0
Регистрация: 27.06.2013
Сообщений: 127
11.01.2016, 17:56  [ТС]
принцип понял, благодарю.. Попробую сделать.
0
0 / 0 / 0
Регистрация: 18.01.2019
Сообщений: 22
23.01.2020, 09:49
Добрый день. Все работат, все процессы физически завершаются, но на консоль выводится неверное число выполненных процессов. Например n=3 одновременных процесса, 9 файлов, на консоли только 6 сообщений;n=1,10файлов,9 сообщений ;n=1,1файл,0 сообщений.

C#
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
.....
for (int i = 0; i <= list.Count - 1; i++)
            {
 
 
                psiOpt.Arguments = list[i]  + list2[i];
 
               
                    WaitForFreeSlot();
                    Process procCommand = Process.Start(psiOpt);
                    _runningProcs.Add(procCommand);
 
        }
 
        private void WaitForFreeSlot()
        {
            for (; ; )
            {
                for (int i = _runningProcs.Count - 1; i >= 0; i--)
                {
                    if (_runningProcs[i].HasExited)
                    {
                         m++;
                         Console.WriteLine ("Выполнено" +m);
                        _runningProcs[i].Dispose();
                        _runningProcs.RemoveAt(i);
 
                    }
                }
 
                if (_runningProcs.Count ==n)
                {
                    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;
            }
 
        }
Т.е. не выводятся именно последние в списке list файлы. Почему?
0
0 / 0 / 0
Регистрация: 18.01.2019
Сообщений: 22
23.01.2020, 19:16
Может быть процесс завершается раньше чем попадает в блок с HasExited и момент завершения процесса "пропадает"?
0
0 / 0 / 0
Регистрация: 18.01.2019
Сообщений: 22
24.01.2020, 14:06
Разобрался. Ничего не "пропадает". Ошибка была в циклах.
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
raxper
Эксперт
30234 / 6612 / 1498
Регистрация: 28.12.2010
Сообщений: 21,154
Блог
24.01.2020, 14:06
Помогаю со студенческими работами здесь

The process cannot access the file because it is being used by another process
Здравствуйте, столкнулся с проблемой. При компиляции кода в MSVS 12 выдаётся следующая ошибка: ...

Как сосчитать сумму
Нужно сосчитать сумму произведения 2х компонентов - количество и расценка, во всех строках DBGrid и вывести общую сумму в поле...

Как сосчитать камни :)
Всем доброго времени суток, Стоит задача автоматически определять тип морского дня и идентифицировать / считать объекты (камни по...

Как сосчитать обратную польскую?
#include &lt;stdio.h&gt; #include &lt;conio.h&gt; #define N 255 #define OK 1 #define NotOK 0 #define Op 5 char Stack; char opers={'+',...

Как сосчитать интеграл с модулями
∫||w-74|-34|dw Пределы интегрирования от -155 до 179


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
6
Ответ Создать тему
Новые блоги и статьи
Камера Toupcam IUA500KMA
Eddy_Em 12.02.2026
Т. к. у всяких "хикроботов" слишком уж мелкий пиксель, для подсмотра в ESPriF они вообще плохо годятся: уже 14 величину можно рассмотреть еле-еле лишь на экспозициях под 3 секунды (а то и больше),. . .
И ясному Солнцу
zbw 12.02.2026
И ясному Солнцу, и светлой Луне. В мире покоя нет и люди не могут жить в тишине. А жить им немного лет.
«Знание-Сила»
zbw 12.02.2026
«Знание-Сила» «Время-Деньги» «Деньги -Пуля»
SDL3 для Web (WebAssembly): Подключение Box2D v3, физика и отрисовка коллайдеров
8Observer8 12.02.2026
Содержание блога Box2D - это библиотека для 2D физики для анимаций и игр. С её помощью можно определять были ли коллизии между конкретными объектами и вызывать обработчики событий столкновения. . . .
SDL3 для Web (WebAssembly): Загрузка PNG с прозрачным фоном с помощью SDL_LoadPNG (без SDL3_image)
8Observer8 11.02.2026
Содержание блога Библиотека SDL3 содержит встроенные инструменты для базовой работы с изображениями - без использования библиотеки SDL3_image. Пошагово создадим проект для загрузки изображения. . .
SDL3 для Web (WebAssembly): Загрузка PNG с прозрачным фоном с помощью SDL3_image
8Observer8 10.02.2026
Содержание блога Библиотека SDL3_image содержит инструменты для расширенной работы с изображениями. Пошагово создадим проект для загрузки изображения формата PNG с альфа-каналом (с прозрачным. . .
Установка Qt-версии Lazarus IDE в Debian Trixie Xfce
volvo 10.02.2026
В общем, достали меня глюки IDE Лазаруса, собранной с использованием набора виджетов Gtk2 (конкретно: если набирать текст в редакторе и вызвать подсказку через Ctrl+Space, то после закрытия окошка. . .
SDL3 для Web (WebAssembly): Работа со звуком через SDL3_mixer
8Observer8 08.02.2026
Содержание блога Пошагово создадим проект для загрузки звукового файла и воспроизведения звука с помощью библиотеки SDL3_mixer. Звук будет воспроизводиться по клику мышки по холсту на Desktop и по. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru