У меня есть родительский поток. Задача состоит в том, чтобы запросить запрос и инициировать дочерний поток. Дочерний поток должен получать данные от веб-службы и обратного вызова к родительскому потоку. Данные процесса родительского потока и запуск другого дочернего потока. Проблема в том, что все, что находится внутри метода обратного вызова, обрабатывается дочерним потоком, а не родительским потоком. Есть ли способ обработать обратный вызов родительским потоком? Другими словами, дочерний поток заканчивается сразу после вызова метода обратного вызова без его обработки.Обратный вызов родительского потока из дочернего потока
ответ
Для этого вам нужен какой-то дизайн, но для начала я не вижу точки дочернего потока, если основной поток ничего не сделает, кроме как дожидаться завершения. Если, с другой стороны, основной поток должен обслуживать дальнейшие входящие запросы, то он также не может обслуживать обратные вызовы из дочерних потоков. Вам придется переосмыслить это. Одна идея состоит в том, чтобы один поток собирал запросы и толкал их в очередь. Ребенок-потоки переносят свои события в одну очередь, и есть отдельный поток, который обрабатывает события из очереди - как запросы, так и ответы от дочерних потоков.
Если такая вещь звучит хорошо для вас, тогда обязательно используйте ExecutorService
для обработки очередей заданий.
Как упоминалось в Marko, вы можете использовать ExecutorService, у которых есть ссылка Future, вы можете вернуть результат выполнения задания в родительский поток.
- 1. Обратный вызов обратного потока
- 2. Вызов метода дочерних потоков из родительского потока
- 3. Прерывание основного потока raw_input() из дочернего потока
- 4. Завершение рабочего потока из родительского потока - MFC
- 5. Периодический обратный вызов из потока в Python
- 6. Обратный вызов после завершения потока .Start()?
- 7. Вызов активности из потока
- 8. Вызов def из потока
- 9. как увеличить приоритет дочернего pthread относительно родительского потока
- 10. Выполняет обратный вызов из подкласса потока в основном потоке
- 11. Обратный звонок из другого потока вызывает исключение
- 12. Вызов System.Timers.Timer.Stop из потока таймера
- 13. Вызов метод делегата из потока
- 14. Вызов Invoke/BeginInvoke из потока
- 15. Вызов метода JList из потока
- 16. Вызов runOnUiThread из другого потока
- 17. Вызов из неправильного исключения потока
- 18. Вызов указателя из C++-потока
- 19. Обновление управления из дочернего потока в C#
- 20. Получение http-сессии из дочернего потока?
- 21. Доступ к родительскому экземпляру из дочернего потока
- 22. C++ Boost: функция вызова из родительского потока
- 23. Java Threads - остановка потока из другого потока, вызывающего вызов метода
- 24. Вызов потока пользовательского интерфейса из рабочего потока в приложении Metro
- 25. создание потока внутри дочернего процесса
- 26. Rmname в родительском потоке удаляет элемент из дочернего потока?
- 27. Вызов JavaScript родительского окна из дочернего окна
- 28. iOS как зарегистрировать селектор как обратный вызов события потока?
- 29. Обратный вызов не вызывается в Facebook входа потока
- 30. Как получить обратный вызов при выполнении потока, например, paging
Чтобы проверить, если я понял: Темы: Главная - взаимодействует с пользователем -> Service - очереди запрашивать и начать -> Процессор - обрабатывать запрос (получить данные из веб-службы) -> Viewer - показать данные по на экране Должен ли я иметь столько потоков, или это можно сделать проще? – user1137146
Вы имеете в виду, что на самом деле у вас есть поток графического интерфейса и вы хотите разгрузить длинную операцию (вызов WS) в поток без GUI? Это все, что вы ищете? –
Да. Все, что я хочу знать, это то, что, когда я успешно получаю данные из WS с некоторым потоком, мне нужно создать новый поток для отображения данных или я могу вызвать свой родительский поток для этого. Я не хочу, чтобы поток WS обрабатывал отображение данных. – user1137146