Есть десяток-полтора консольных потоков, которые стартуют одновременно через start:
cmd: dzzb.ru
start lame -h audio_01.wav audio_01.mp3 -v -b 32 -B 128
start lame -h audio_02.wav audio_02.mp3 -v -b 32 -B 128
start lame -h audio_03.wav audio_03.mp3 -v -b 32 -B 128
start lame -h audio_04.wav audio_04.mp3 -v -b 32 -B 128
start lame -h audio_05.wav audio_05.mp3 -v -b 32 -B 128
Или же архивация нескольких директорий, или параллельная конвертация изображений.
Как настроить скрипт так, чтобы он не выполнялся далее, пока не сработают все потоки start из группы?
Ответ один - костылями.
Написал небольшую утилиту (MScen.exe), которая делает желаемое. Скриптом генерится список команд для неё (MScen.txt), а она уже запускает их все одновременно. Запущенные процессы отслеживаются по ID и когда они все завершаются, то закрывается и сама MScen.exe
Если MScen.exe переименовать, то утилька будет искать скрипт со своим именем (++MScen++.exe будет искать ++MScen++.txt)
Выкладываю для примера скрипт конвертации пачки WAV >> MP3 (!!Все файлы будут конвертироваться одновременно!!)
Для сотни-двух одновременных процессов запускать такое - самоубийство, хотя конкретно Lame уходит в анабиоз, если запущено ооочень много потоков. 20-30 процессов нагружает систему на 100%, 200-300 - не нагружают ее абсолютно, думаю начинает всё упираться в скорость работы HDD и получаем обратный эффект.
Скачать