|
436 / 161 / 28
Регистрация: 12.12.2020
Сообщений: 1,284
|
||||||
Как подождать выполнения потока05.01.2021, 23:21. Показов 2154. Ответов 7
Метки нет (Все метки)
Помогите, плз. Нужно сделать обмен данными с блютус устройством. Код примерно такой:
Как исправить ситуацию? Я тут почитал почитал... через Handler можно вроде как то отправлять сообщения в поток с задержкой отправки.... либо через таймер как то вызывать метод через заданное время... но как то это геморойно, помоему.... как вообще такие ситуации решаются? Добавлено через 44 минуты или создать еще один поток и данные ждать в нем? Ну и отправлять заодно можно.... но прием то данных тоже в потоке, он же должен выполняться независимо от обработчика нажатия кнопки. Почему не работает?
0
|
||||||
| 05.01.2021, 23:21 | |
|
Ответы с готовыми решениями:
7
Заставить pthread подождать, до выполнения условия Как избежать уничтожения потока после выполнения им своей функции? |
|
29 / 24 / 5
Регистрация: 25.12.2018
Сообщений: 614
|
|
| 14.01.2021, 12:46 | |
|
Ты сначала проверь, действительно ли его нужно ждать, в потоке введи Thread.sleep(5000L) подожди 5 секунд, если результат так и не пришел, значит дело не в потоке.
0
|
|
|
436 / 161 / 28
Регистрация: 12.12.2020
Сообщений: 1,284
|
||||||
| 16.01.2021, 21:30 [ТС] | ||||||
|
Да, проверил. Вот такой код:
Почему так происходит? Добавлено через 1 час 9 минут Сделал что бы поток тоже писал в лог когда приходит байт. И получается что я жму кнопку отправки байтов, они уходят, потом ожидание, после того как все время вышло появляется сообщение "нет ответа" и тольок после этого от потока приходит сообщение "получены байты", то есть пока выполняется функция по нажатию кнопки - поток не работает?
0
|
||||||
|
76 / 52 / 26
Регистрация: 23.01.2019
Сообщений: 134
|
|
| 17.01.2021, 02:33 | |
|
Привет.
Ожидать выполнения операций приема-передачи в основном потоке - это плохая идея. При нажатии кнопки следует только передать команду на выполнение действия приема-передачи и завершить обработку нажатия. После этого отдельный поток должен выполнить это действие и каким-то образом оповестить основной поток о завершении операции и результатах. Я обычно оповещаю через широковещательные сообщения (Broadcast) или пишу интерфейс с Callback функциями.
0
|
|
|
29 / 24 / 5
Регистрация: 25.12.2018
Сообщений: 614
|
|
| 17.01.2021, 16:36 | |
|
используйте join() и тогда код не продолжит последовательное выполнение, пока ваш поток не завершит работу.
загуглите java ожидание завершения потока, кликайте самую верхнюю ссылку
0
|
|
|
436 / 161 / 28
Регистрация: 12.12.2020
Сообщений: 1,284
|
|||||
| 17.01.2021, 17:10 [ТС] | |||||
Добавлено через 41 секунду
0
|
|||||
|
29 / 24 / 5
Регистрация: 25.12.2018
Сообщений: 614
|
||
| 17.01.2021, 18:21 | ||
|
Тип укажите тот, который хотите передать, далее, там, где вы эти данные передаете в потоке, напишите myExchanger.exchange(сюда вставьте данные для передачи), а в другом своем потоке, где вы эти данные хотите получить, вызовите String data = myExchanger.exchange(сюда вставьте произвольные данные, не важно какие, главное того же типа) , переменная дата получит данные из потока, где вы данные отправляли, поток встанет на ожидание, пока не сможет передать эти данные.
0
|
||
|
436 / 161 / 28
Регистрация: 12.12.2020
Сообщений: 1,284
|
||||||
| 23.01.2021, 01:41 [ТС] | ||||||
|
Всем спасибо. Разобрался. Ожидаю ответа в созданном потоке, а для обновления UI делаю в runOnUiThread
Код примерно такой.
Я так понял что для андройда удобней делать когда пакет данных, приходящий по блютусу, будет иметь заголовок позволяющий его идентифицировать и при приеме данных обрабатывать его не возвращаясь в функцию откуда отправили запрос. В будущем так и буду делать, но тут из принципа хотелось разобраться.
0
|
||||||
| 23.01.2021, 01:41 | |
|
Помогаю со студенческими работами здесь
8
Определение времени выполнения потока Измерение времени выполнения потока Приостановка выполнения процесса/потока (windows)
Определение времени выполнения потока Искать еще темы с ответами Или воспользуйтесь поиском по форуму: |
|
Новые блоги и статьи
|
|||
|
Программный контроль заполнения реквизита табличной части документа
Maks 02.04.2026
Алгоритм из решения ниже реализован на примере нетипового документа "СписаниеМатериалов", разработанного в конфигурации КА2.
Задача: реализовать контроль заполнения реквизита табличной части. . .
|
wmic не является внутренней или внешней командой
Maks 02.04.2026
Решение:
DISM / Online / Add-Capability / CapabilityName:WMIC~~~~
Отсюда: https:/ / winitpro. ru/ index. php/ 2025/ 02/ 14/ komanda-wmic-ne-naydena/
|
Программная установка даты и запрет ее изменения
Maks 02.04.2026
Алгоритм из решения ниже реализован на примере нетипового документа "СписаниеМатериалов", разработанного в конфигурации КА2.
Задача: при создании документов установить период списания автоматически. . .
|
Вывод данных в справочнике через динамический список
Maks 01.04.2026
Реализация из решения ниже выполнена на примере нетипового справочника "Спецтехника" разработанного в конфигурации КА2.
Задача: вывести данные из ТЧ нетипового документа. . .
|
|
Функция заполнения текстового поля в реквизите формы документа
Maks 01.04.2026
Алгоритм из решения ниже реализован на нетиповом документе "ВыдачаОборудованияНаСпецтехнику" разработанного в конфигурации КА2, в дополнении к предыдущему решению.
На форме документа создается. . .
|
К слову об оптимизации
kumehtar 01.04.2026
Вспоминаю начало 2000-х, университет, когда я писал на Delphi. Тогда среди программистов на форумах активно обсуждали аккуратную работу с памятью: нужно было следить за переменными, вовремя. . .
|
Идея фильтра интернета (сервер = слой+фильтр).
Hrethgir 31.03.2026
Суть идеи заключается в том, чтобы запустить свой сервер, о чём я если честно мечтал давно и давно приобрёл книгу как это сделать. Но не было причин его запускать. Очумелые учёные напечатали на. . .
|
Модель здравосоХранения 6. ESG-повестка и устойчивое развитие; углублённый анализ кадрового бренда
anaschu 31.03.2026
В прикрепленном документе раздумья о том, как можно поменять модель в будущем
|