Страницы: 1
RSS
Многопоточность в VBA
 
Всем привет!

Алгоритм действий пользователя:
- Заполняем столбец "РЕЖИМ ОЗУ", графы "ОБЪЁМ ОЗУ" и "АЛГОРИТМ СЖАТИЯ"
- Складываем необходимые для теста утилиты и файлы в папку "(tools)" рядом с Brut-4.xlsm
- Растягиваем таблицу "ПОДБОР" (при необходимости)
- Жмём кнопку "СТАРТ", далее работает макрос

Алгоритм действий макроса:
- Макрос группами (пулами) запускает алгоритмы, указанные в ячейке [M2]
ч/з утилиту procprofile32.exe, группа 1:
procprofile32 -r7b -b -u nz.exe a -cc -m8000m 8000.nz Test.srep >> 8000.txt
procprofile32 -r7b -b -u nz.exe a -cc -m6500m 6500.nz Test.srep >> 6500.txt
procprofile32 -r7b -b -u nz.exe a -cc -m500m 500.nz Test.srep >> 500.txt
(в результате будут созданы файлы 8000.nz+6500.nz+500.nz, 8000.txt+6500.txt+500.txt).
- Далее из txt-файлов макрос считывает значения ОЗУ+РАЗМЕР+ВРЕМЯ в Brut-4.xlsm и сохраняет Brut-4.xlsm
- Затем макрос удаляем *.nz+*.txt и запускаем следующий пул (группу) тестов:
procprofile32 -r7b -b -u nz.exe a -cc -m7900m 7900.nz Test.srep >> 7900.txt
procprofile32 -r7b -b -u nz.exe a -cc -m6400m 6400.nz Test.srep >> 6400.txt
procprofile32 -r7b -b -u nz.exe a -cc -m700m 700.nz Test.srep >> 700.txt
и т.д.

Тестовые файлы, внутри Brut-4.xlsm есть Sub test() - моя заготовка и Sub bedvit() - заготовка bedvit.

Поможете сделать?

Upd: перенесено в раздел "Работа".
Изменено: Acid Burn - 17.10.2019 23:47:39
 
Да можно хоть сколько процессов запустить
Ваш же макрос не требует получения результата от запущенного процесса, — потому, запускайте из сколько угодно, они все параллельно будут выполняться
Никаких усложнений кода (типа того, что по вашим ссылкам) не требуется
 
Цитата
Игорь написал:
Да можно хоть сколько процессов запустить
с одним крохотным дополнением, что сама утилита nz64.exe при многократном запусе запускается в новом процессе, а уж все остальное зависит от операционной системы. И тут подходим к названию темы котороре не соотвтевует вопросу.
Изменено: БМВ - 13.09.2019 07:21:02
По вопросам из тем форума, личку не читаю.
 
Цитата
Игорь написал:
макрос не требует получения результата от запущенного процесса
Вроде как требует: нужно дождаться завершения первой группы процессов,
и только потом запустить следующую.
Сама ОС так сделать не может, а как сделать это на VBA я не представляю.
Изменено: Acid Burn - 13.09.2019 09:40:18
 
1. VBA не поддерживает многопоточность. Вы запускаете процессы последовательно.
2. Что за утилита nz64.exe? что она делает? вы ее писали?
«Бритва Оккама» или «Принцип Калашникова»?
 
bedvit
1. Запустить последовательно - не проблема, надо группами (похоже, что это возможно).
2. Утилита nz64.exe - это архиватор, Test.srep - любой файл/архив с расширением srep.
 
Цитата
Acid Burn написал:
Сама ОС так сделать не может, а как сделать это на VBA я не представляю.
да ладно?
start запускает и не ждет. Собственно SHELL сделает тоже самое и только это  
Цитата
БМВ написал:
что сама утилита nz64.exe при многократном запусе запускается в новом процессе
может не позволить.
По вопросам из тем форума, личку не читаю.
 
Цитата
Acid Burn написал:
(похоже, что это  возможно ).
Написать свою СОМ dll? Да это не проблема. поэтому я вас и спросил ваша ли это утилита, можно ее было бы легко поправить, не прибегая к помощи VBA.
Вы должны понимать как идет выполнение кода, что бы решить свою задачу.
Если dll свою вы не сможете написать, то что бы запустить пул процессов (последовательно) в VBA, потом по результатам работы этого пула запустить второй пул в VBA - нужно знать когда первый пул отработает (так как выполняется он не в трансляторе VBA), в этом вся соль. У вас есть такой флаг или понимание как его получить?
«Бритва Оккама» или «Принцип Калашникова»?
 
Цитата
bedvit написал:
нужно знать когда первый пул отработает
В папке появятся файлы типа Test_8000.nz + Test_8000.txt, это можно отследить.
Годится?
Изменено: Acid Burn - 13.09.2019 10:25:35
 
Да, можно написать код в VBA, который запустит пул процессов, далее будет в цикле (к примеру через DoEvents), а лучше через Application.OnTime (что бы не грузить систему), отслеживать когда этот пул выполнится (по наличию нужных файлов в папке) и дальше запустит второй пул и т.д.
«Бритва Оккама» или «Принцип Калашникова»?
 
bedvit, сможете написать?
Сам я редко пишу на VBA, вчера часа 3 пытался вспомнить/сделать, но тщетно. :(
 
Сейчас набросаю заготовку...
«Бритва Оккама» или «Принцип Калашникова»?
 
bedvit, спасибо! В файле из сообщения №1 есть небольшая заготовка.
Может чем-то пригодится...
 
Распаковываем архив в папку, запускаем макрос.
Создаются 10 файлов по 5 в одном пуле (параллельно).
еxe мой, без вирусов (гарантировано).
Набросал по быстрому, думаю, методика понятна.
Изменено: bedvit - 13.09.2019 14:27:41 (Корректировка кода для правильного завершения Application.OnTime)
«Бритва Оккама» или «Принцип Калашникова»?
 
bedvit, всё работает, вечером буду рассматривать. Спасибо!
 
Acid Burn, скачал ваш файл, запустил макрос. Макрос запустился. В чем вопрос?
«Бритва Оккама» или «Принцип Калашникова»?
 
Да, Brut-4.xlsm и макрос в нём запускаются, но макрос делает не то, что надо.
Алгоритм действий пользователя и макроса уточнил в посте #1.
Изменено: Acid Burn - 17.10.2019 23:48:56
 
А в чем вопрос? Что, конкретно, не получается?
«Бритва Оккама» или «Принцип Калашникова»?
 
Вопрос в реализации указанного сценария.
Не получается запустить группу тестов, считать результат из txt и затем запустить следующую группу тестов.
 
bedvit,  Виталий, ну Вы от куда? Нет многопоточности, значит тема названа некорректно или не должна иметь продолжения после #5.
По вопросам из тем форума, личку не читаю.
 
В #14 предложено решение к такому названию темы:
"Последовательный запуск из VBA независимых (в т.ч. от VBA) процессов, с проверкой на завершение каждого"
в описание темы "независимые процессы могут выполнятся параллельно"
«Бритва Оккама» или «Принцип Калашникова»?
 
Друзья, ну так что решим?
 
Acid Burn, а что тут решать?
Вы ждёте, когда всё сделают за вас
(конкретных вопросов не задаете, пишете что-то типа задания, сами не пытаетесь написать код по советам форумчан)
Может, с таким подходом, пора уже в раздел Работа?
Страницы: 1
Наверх