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

Программирование Android

Войти
Регистрация
Восстановить пароль
 
Tester64
396 / 357 / 43
Регистрация: 22.05.2013
Сообщений: 2,518
#1

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

07.04.2014, 13:52. Просмотров 1075. Ответов 7
Метки нет (Все метки)

Пытаюсь написать многопоточную программу и окончательно запутался... Много блокировок. Все в одном классе. Методы класса выполняются во втором потоке.
Пытаюсь выводить ВСЕ в 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();
            }
но не знаю что он делает с процессором и работает ли не в основном потоке...
0
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
07.04.2014, 13:52
Здравствуйте! Я подобрал для вас темы с ответами на вопрос Узнать номер потока в котором исполняется функция (Программирование Android):

Изменение View, не из того потока, в котором оно создано - Программирование Android
Использую библиотеку OpenCV. Активити реализует JavaCameraView из этой библиотеки. В JavaCameraView есть событие OnCameraFrame(Mat...

Узнать программно номер телефона - Программирование Android
Как узнать программно номер телефона android если номер пользовательского устройства невозможно увидеть в настойках телефона(Информация об...

Узнать номер записи по id (SQLite) - Программирование Android
Привет! Осваиваю SQLite, столкнулся с проблемой. Мне нужно получить номер записи, по id записи... Допустим в таблице "mytable" 3...

Узнать порядковый номер выбранного элемента - Программирование Android
Добавляю заранее неизвестное количество Radio Button в Radio Group. Добавляю так: private RadioButton newRadioButton(Context context,...

Остановка потока, в котором вызвана синхронная функция ввода вывода - Boost C++
Имется запущенный поток boost:thread. В нем вызван синхронная операция работы с портом read_some. Все работает хорошо до момента когда...

Как завершить поток, в котором исполняется чужой код? - C#
имеется сторонний асинхронный метод. Как получить дескриптор потока, который запускает этот метод? Как завершить уж разберусь)

Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
dan41k
]:->
98 / 92 / 13
Регистрация: 12.11.2013
Сообщений: 398
07.04.2014, 14:31 #2
Java
1
Thread.currentThread();
1
Tester64
396 / 357 / 43
Регистрация: 22.05.2013
Сообщений: 2,518
07.04.2014, 14:45  [ТС] #3
Вроде получил код Thread.currentThread().getId() - буду тестить!
А что по поводу №2 - sleep потока?
0
dan41k
]:->
98 / 92 / 13
Регистрация: 12.11.2013
Сообщений: 398
07.04.2014, 14:53 #4
Ну мне кажется

Java
1
Thread.currentThread().sleep(**время в мс**);
подойдет.
0
YuraAAA
1574 / 1316 / 271
Регистрация: 25.10.2009
Сообщений: 3,438
Записей в блоге: 2
07.04.2014, 15:18 #5
Цитата Сообщение от Tester64 Посмотреть сообщение
sleep потока?
не оч хорошая идея
0
Tester64
396 / 357 / 43
Регистрация: 22.05.2013
Сообщений: 2,518
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);
Показывает что замораживаю не основной поток, но зависает вся программа... Причем зависает так что предлагает ее закрыть...
0
YuraAAA
1574 / 1316 / 271
Регистрация: 25.10.2009
Сообщений: 3,438
Записей в блоге: 2
08.04.2014, 10:12 #7
Tester64,
Цитата Сообщение от Tester64 Посмотреть сообщение
Показывает что замораживаю не основной поток, но зависает вся программа... Причем зависает так что предлагает ее закрыть...
как Вы поток создаёте и запускаете?
0
Tester64
396 / 357 / 43
Регистрация: 22.05.2013
Сообщений: 2,518
08.04.2014, 14:07  [ТС] #8
Все! Получилось!
Проблема была в блокировках рабочего списка! Цикл прогонял список и блокировал его пока не закончит. А пользователь блокировал его-же что-бы добавить записи... В результате пользователь не мог добавить запись пока на закончится цикл... И хотя цикл шел в другом потоке (это явно показывал Log.i( ""+Thread.currentThread().getId()); ), но усыплял и основной поток!

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

Добавлено через 6 минут
Кстати добился прикольного эффекта - адаптер на 8000 строк. Листается ОЧЕНЬ быстро. Но отрисовка и расчет строк происходит в соседнем потоке. Причем только видимых. Даже если имитирую отрисовку каждой строки в 1000мс, листание списка не тормозит.
0
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
08.04.2014, 14:07
Привет! Вот еще темы с ответами:

Excel VBA: скрыть от пользователя лист, на котором исполняется макрос - VBA
Здравствуйте! Есть лист (назовем его "секретный"), на котором исполняется макрос (время исполнения ~30 секунд), причем пользователь не...

Необходимо в собственной функции использовать номер столбца, в котором и находится данная функция - VBA
Люди добрые, помогите пожалуйста. Необходимо в собственной функции использовать номер столбца, в котором и находится даная ф-ия. Спасибо

Обращение к элементу WinForms из потока, отличного от потока, в котором это элемент был создан - C#
Пишу приложение, котором при загрузке формы в textbox на этой форме заносятся данные. Причем данных много и процесс занимает длительное...

Можно ли узнать имя функции, код которой исполняется в данный момент времени? - C++ WinAPI
Ну собственно просто интересно, есть ли такая возможность. Нужно это для более гибкого дебага, ну типо внутри функции ошибка, я каким то...


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

Или воспользуйтесь поиском по форуму:
Yandex
Объявления
08.04.2014, 14:07
Ответ Создать тему
Опции темы

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