Форум программистов, компьютерный форум CyberForum.ru

Узнать номер потока в котором исполняется функция - Android

Войти
Регистрация
Восстановить пароль
 
Tester64
395 / 356 / 43
Регистрация: 22.05.2013
Сообщений: 2,488
07.04.2014, 13:52     Узнать номер потока в котором исполняется функция #1
Пытаюсь написать многопоточную программу и окончательно запутался... Много блокировок. Все в одном классе. Методы класса выполняются во втором потоке.
Пытаюсь выводить ВСЕ в Log.i(), но этого мало.
1) Можно ли получить номер/код/ссылку на текущий поток, который вызывает Log.i() и вывести его? Что-бы хотя-бы отличать первый от второго.

Подозреваю что доблокировался до того что все происходит в главном... Или что второй или первый всегда приостановлен...

2) И еще... как можно сделать "процессоро не нагружаемую" блокировку второго потока например на 100 миллисекунд? Типа Делфийского Sleep(100);.
Встречал код для "имитации нагрузки процессора":
Java
1
2
3
4
5
6
7
            try {
                SystemClock.sleep(100);
//или
                Thread.sleep(100);
            } catch (Exception e) {
                //e.printStackTrace();
            }
но не знаю что он делает с процессором и работает ли не в основном потоке...
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
dan41k
]:->
 Аватар для dan41k
97 / 91 / 13
Регистрация: 12.11.2013
Сообщений: 398
07.04.2014, 14:31     Узнать номер потока в котором исполняется функция #2
Java
1
Thread.currentThread();
Tester64
395 / 356 / 43
Регистрация: 22.05.2013
Сообщений: 2,488
07.04.2014, 14:45  [ТС]     Узнать номер потока в котором исполняется функция #3
Вроде получил код Thread.currentThread().getId() - буду тестить!
А что по поводу №2 - sleep потока?
dan41k
]:->
 Аватар для dan41k
97 / 91 / 13
Регистрация: 12.11.2013
Сообщений: 398
07.04.2014, 14:53     Узнать номер потока в котором исполняется функция #4
Ну мне кажется

Java
1
Thread.currentThread().sleep(**время в мс**);
подойдет.
YuraAAA
 Аватар для YuraAAA
1563 / 1305 / 269
Регистрация: 25.10.2009
Сообщений: 3,424
Записей в блоге: 2
07.04.2014, 15:18     Узнать номер потока в котором исполняется функция #5
Цитата Сообщение от Tester64 Посмотреть сообщение
sleep потока?
не оч хорошая идея
Tester64
395 / 356 / 43
Регистрация: 22.05.2013
Сообщений: 2,488
07.04.2014, 17:52  [ТС]     Узнать номер потока в котором исполняется функция #6
Цитата Сообщение от YuraAAA Посмотреть сообщение
не оч хорошая идея
Почему? Мне нужно в потоке научиться делать длинные операции без вреда для основного потока. Если СРАЗУ нагружаю поток, то не могу понять кто тормозит - основной поток или начинка второго? Если второй поток замечает изменения, то он выводит свои значения в первый (визуальный) поток, а значит его приостанавливает на момент отрисовки.

Поэтому пока хочу заменить во втором потоке работу с базой на приостановку на фиксированое время. Что-бы УВИДЕТЬ задержку в отрисовке, но не в работе основного потока.

Добавлено через 2 часа 6 минут
Цитата Сообщение от dan41k Посмотреть сообщение
Thread.currentThread().sleep(**время в мс**);
Не помогло! Сделал примерно так:
Java
1
2
Log.i(""+Thread.currentThread().getId());
Thread.currentThread().sleep(3000);
Показывает что замораживаю не основной поток, но зависает вся программа... Причем зависает так что предлагает ее закрыть...
YuraAAA
 Аватар для YuraAAA
1563 / 1305 / 269
Регистрация: 25.10.2009
Сообщений: 3,424
Записей в блоге: 2
08.04.2014, 10:12     Узнать номер потока в котором исполняется функция #7
Tester64,
Цитата Сообщение от Tester64 Посмотреть сообщение
Показывает что замораживаю не основной поток, но зависает вся программа... Причем зависает так что предлагает ее закрыть...
как Вы поток создаёте и запускаете?
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
08.04.2014, 14:07     Узнать номер потока в котором исполняется функция
Еще ссылки по теме:

Узнать номер записи по id (SQLite) Android
Android Узнать программно номер телефона
Android Не работает остановка потока!
Низкая производительность потока Android
Остановка потока Android

Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
Tester64
395 / 356 / 43
Регистрация: 22.05.2013
Сообщений: 2,488
08.04.2014, 14:07  [ТС]     Узнать номер потока в котором исполняется функция #8
Все! Получилось!
Проблема была в блокировках рабочего списка! Цикл прогонял список и блокировал его пока не закончит. А пользователь блокировал его-же что-бы добавить записи... В результате пользователь не мог добавить запись пока на закончится цикл... И хотя цикл шел в другом потоке (это явно показывал Log.i( ""+Thread.currentThread().getId()); ), но усыплял и основной поток!

Вопрос в догонку: Сколько потоков может выдержать ява? Сотня-две его не убьет?

Добавлено через 6 минут
Кстати добился прикольного эффекта - адаптер на 8000 строк. Листается ОЧЕНЬ быстро. Но отрисовка и расчет строк происходит в соседнем потоке. Причем только видимых. Даже если имитирую отрисовку каждой строки в 1000мс, листание списка не тормозит.
Yandex
Объявления
08.04.2014, 14:07     Узнать номер потока в котором исполняется функция
Ответ Создать тему
Опции темы

Текущее время: 04:03. Часовой пояс GMT +3.
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2017, vBulletin Solutions, Inc.
Рейтинг@Mail.ru