Есть некая функция (20-ая по списку в call stack). Она вызывает модальное окно.
При переписке GUI на Web UI возник вопрос реализации модальности через AJAX.
Чтобы отдать окно браузеру, нужно завершить поток, в котором выполнялась функция запуска модального окна.
Чтобы завершить поток, нужно получить результаты диалогового окна. В этом и суть проблемы.
Два неудачных варианта решения:
1. Порезать все 20 функций на 2 части. Все, что до модального окна, и само окно отдается и отрабатывается в первом потоке.
Все что после — во втором. Резать функции на 2 приходится для того, чтобы можно было разделить «до» и «после».
2. Остановить поток, который дошел до модального окна. Создать второй поток, что отдает браузеру модальное окно. По возврату от модального окна — восстанавливать первый поток.
Первый вариант ламает принципы ООП, трудоемок. Второй вариант — сложен в реализации, требует низкоуровневый работы и вмешательства в уже существующие модули.
В браузере пользователь нажал на кнопку чем вызвал AjaxRequest.
На сервера запустилась функция f1.
Она запустила f2, которая запустила f3.… f20. f20 запустила модальное окно.
Модули fcgi работают так, что чтобы отдать окно (Ajax Responce) нужно завершить поток( тоесть f1 должна завершится)
Но она не может выполнится потому, что f20 должна использовать ответы от модального окна.
Изначально этот код не мой, я бы такого не напроектировал даже под дулом пистолета, но расхлебывать мне.