CreateEvent и WaitForSingleObject

Столкнулись с проблемой в использовании макросов? Здесь можно получить помощь.
Post Reply
buniak_a_h
Posts: 1389
Joined: Sat 20 Apr, 2013 00:17
Location: Питер
Has thanked: 95 times
Been thanked: 105 times
Contact:

CreateEvent и WaitForSingleObject

Post by buniak_a_h »

Здравствуйте.
Есть ли возможность блокировать выполнение скрипта до наступления некоего события (аналогично паре CreateEvent / WaitForSingleObject)?
Поясню контекст.
У меня есть функция, создающая немодальный диалог с DI_LIST-ом и по таймеру обходящая вложенные папки и если файл удовлетворяет критериям, то заносит его в список (получается, в фоне идёт поиск). Работает замечательно за исключением того, что выход из функции происходит сразу после начала работы. А мне надо, чтоб функция вернула сформированный список. Т.е. мне нужно заблокировать выполнение макроса до тех пор, пока не закончится фоновый процесс. Я наверняка сделал что-то неправильно в принципе, но так и не понял, как сделать.
В написании скрипта использовался пример от John Doe
Такой вот меленький скрипт:

На Delphi, например, я такие ситуации решаются указанной в заголовке парой вызовов…
Last edited by buniak_a_h on Mon 18 Nov, 2019 12:46, edited 1 time in total.

User avatar
John Doe
Бюрократ
Posts: 12589
Joined: Wed 27 Apr, 2005 20:42
Has thanked: 34 times
Been thanked: 257 times

CreateEvent и WaitForSingleObject

Post by John Doe »

Такой возможности нет.
Если надо дождаться завершения фонового скрипта - значит фоновый скрипт и должен запустить необходимые действия.
Можно оформить функцией-коллбэком.

User avatar
zg
zero-gravity
Posts: 5696
Joined: Tue 15 Mar, 2005 17:36
Location: riga
Been thanked: 132 times
Contact:

CreateEvent и WaitForSingleObject

Post by zg »

buniak_a_h wrote:
Mon 18 Nov, 2019 12:45
Есть ли возможность блокировать выполнение скрипта до наступления некоего события
возможность есть, только событие не наступит.
buniak_a_h wrote:
Mon 18 Nov, 2019 12:45
как сделать
убираете в конце far.Show('#aResult='..#aResult) / return aResult. far.Show('#aResult='..#aResult) вставляете после второго timer:Close(). будет работать, как вы хотите. соответственно там же можно написать YourCoolListProcessingFn(aResult) и соответственно получить пользу.
buniak_a_h wrote:
Mon 18 Nov, 2019 12:45
На Delphi, например, я такие ситуации решаются указанной в заголовке парой вызовов…
в delphi вы ж это делаете в отдельном потоке, не?

buniak_a_h
Posts: 1389
Joined: Sat 20 Apr, 2013 00:17
Location: Питер
Has thanked: 95 times
Been thanked: 105 times
Contact:

CreateEvent и WaitForSingleObject

Post by buniak_a_h »

zg, спасибо, кажется, я понял, как сделать...

Post Reply

Return to “Нужна помощь”