Для ожидания чего либо можно использовать таймер
[url]https ://www.sdn.sap.com/irj/sdn/weblogs?blog=/pub/wlg/6685[/url]
И возможно , стоит посмотреть в сторону механизма событий
se62 (3-я закладка)
вызвав программно событие вы стартуете фоновое задание , созданное заранее (программа, транзакция).
Но с событиями придется пересмотреть архитектуру вашего приложения.
1. Гуи старт всех потоков. Запись признака в шаред память.
2. программа Гуи ожидает по таймеру сброса признака.
3. Каждый поток выполняет свой код и в конце вызывает событие.
4. Фоновая программа вызываемая по событию - считает вызовы и когда придет последнее событие (по количеству например) выполняет Общий блок.
Затем сбрасывает признак в шаред памяти
5. Гуи программа прочитав признак - сообщит пользователю о результате работы...
как то так.
код вызова события
Code:
data btc_s_evt_param type BTC_S_EVT_PARAM.
CALL METHOD cl_batch_event=>raise
EXPORTING
i_eventid = 'Z_NAME' " btc_s_evt_param-eventid
i_eventparm = btc_s_evt_param-eventparm
i_server = btc_s_evt_raise_local_disp-eventserver
EXCEPTIONS
excpt_raise_failed = 1
excpt_server_accepts_no_events = 2
excpt_raise_forbidden = 3
excpt_unknown_event = 4
excpt_no_authority = 5
OTHERS = 6.
btc_s_evt_raise_local_disp-sy_subrc = sy-subrc.
CASE sy-subrc.
WHEN 0.
LEAVE TO SCREEN 0.
WHEN 1.
MESSAGE i249(bt) WITH btc_s_evt_param-eventid.
WHEN 2.
MESSAGE i702(bt) WITH btc_s_evt_raise_local_disp-eventserver.
WHEN 3.
MESSAGE i701(bt) WITH btc_s_evt_param-eventid.
WHEN 4.
MESSAGE i042(bt) WITH btc_s_evt_param-eventid.
WHEN 5.
MESSAGE i705(bt).
WHEN OTHERS.
MESSAGE i720(bt) WITH sy-subrc 'event_raise_gui'
'user_command_6000'. "#EC NOTEXT
ENDCASE.