Здравствуйте.
Есть ли возможность блокировать выполнение скрипта до наступления некоего события (аналогично паре CreateEvent / WaitForSingleObject)?
Поясню контекст.
У меня есть функция, создающая немодальный диалог с DI_LIST-ом и по таймеру обходящая вложенные папки и если файл удовлетворяет критериям, то заносит его в список (получается, в фоне идёт поиск). Работает замечательно за исключением того, что выход из функции происходит сразу после начала работы. А мне надо, чтоб функция вернула сформированный список. Т.е. мне нужно заблокировать выполнение макроса до тех пор, пока не закончится фоновый процесс. Я наверняка сделал что-то неправильно в принципе, но так и не понял, как сделать.
В написании скрипта использовался пример от John Doe
Такой вот меленький скрипт:
На Delphi, например, я такие ситуации решаются указанной в заголовке парой вызовов…
CreateEvent и WaitForSingleObject
-
- Posts: 2524
- Joined: Sat 20 Apr, 2013 00:17
- Location: Питер
- Has thanked: 139 times
- Been thanked: 311 times
- Contact:
CreateEvent и WaitForSingleObject
Last edited by buniak_a_h on Mon 18 Nov, 2019 12:46, edited 1 time in total.
- John Doe
- Бюрократ
- Posts: 13064
- Joined: Wed 27 Apr, 2005 20:42
- Has thanked: 42 times
- Been thanked: 319 times
CreateEvent и WaitForSingleObject
Такой возможности нет.
Если надо дождаться завершения фонового скрипта - значит фоновый скрипт и должен запустить необходимые действия.
Можно оформить функцией-коллбэком.
Если надо дождаться завершения фонового скрипта - значит фоновый скрипт и должен запустить необходимые действия.
Можно оформить функцией-коллбэком.
- zg
- zero-gravity
- Posts: 5878
- Joined: Tue 15 Mar, 2005 17:36
- Location: riga
- Been thanked: 158 times
- Contact:
CreateEvent и WaitForSingleObject
возможность есть, только событие не наступит.buniak_a_h wrote: ↑Mon 18 Nov, 2019 12:45Есть ли возможность блокировать выполнение скрипта до наступления некоего события
убираете в конце
far.Show('#aResult='..#aResult)
/ return aResult
. far.Show('#aResult='..#aResult)
вставляете после второго timer:Close()
. будет работать, как вы хотите. соответственно там же можно написать YourCoolListProcessingFn(aResult)
и соответственно получить пользу.
в delphi вы ж это делаете в отдельном потоке, не?buniak_a_h wrote: ↑Mon 18 Nov, 2019 12:45На Delphi, например, я такие ситуации решаются указанной в заголовке парой вызовов…
-
- Posts: 2524
- Joined: Sat 20 Apr, 2013 00:17
- Location: Питер
- Has thanked: 139 times
- Been thanked: 311 times
- Contact: