Модераторы: javastic, AntonSaburov
  

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Синхронизация thread 
:(
    Опции темы
Spegulo
Дата 21.6.2009, 17:19 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 35
Регистрация: 2.4.2009
Где: Новосибирск

Репутация: нет
Всего: нет



Всем привет.
Есть код
Код

gRegistry.gServerSearch = new BlueSearcher();
        gRegistry.gServerSearch.start();
        gRegistry.gFoundServers = gRegistry.gServerSearch.getServices();        
        if (gRegistry.gFoundServers != null)
        ....

Подскажите, плиз, как мне дождаться окончания отработки метода gRegistry.gServerSearch.getServices()?
Он заполняет массив найденных bluetooth-устройств, но на практике отрабатывает только первый добавленный элемент.
Библиотечка взята из статьи 
http://www.mobilab.ru/articles/102/
На сколько я понимаю, тут нужно каким-то образом приостановить основной поток, но как это сделать я не знаю.
PM MAIL ICQ   Вверх
W0LF
Дата 22.6.2009, 01:11 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


alexander lonsky
***


Профиль
Группа: Участник
Сообщений: 1164
Регистрация: 9.2.2006
Где: Ukraine.Dnepropet rovsk

Репутация: 19
Всего: 20



Библиотеку не видел, думаю, че там должен быть метод, который возвращает флаг завершения потока. без него никак, разве что добавить флаг туда, если возможно.
Способов много остановить тред. Начиная от того, что поставить while на проверку того самого метода, заканчивая waitом
можно поставить Thread.sleep() чтоб подождать некоторе время.
синхронизацию можно сделать так, но должна быть возможность коллбека, который сможет вызвать тот другой поток, так как этот будет спать - 
Код

static final Object objectMonitor = new Object();
boolean searchingDone = false;
....
gRegistry.gServerSearch = new BlueSearcher();
        gRegistry.gServerSearch.start();
        gRegistry.gFoundServers = gRegistry.gServerSearch.getServices();        
        
        while (!searchingDone) {
                synchronized(objectMonitor) {
                    try { 
                          objectMonitor.wait(); 
                   } catch (InterruptedException e) {  }
                }
        }
...
      //а вот это тот самый коллбэк, который будит этот поток
     public void doneSearching()
     {
       synchronized(objectMonitor)
       {
         searchingDone = true;
         objectMonitor.notify();
       }
     }
....

Если же такой возможности нет - Thread.sleep() на некоторое время или же то, что ударит по перформансу - while с условием.

Это сообщение отредактировал(а) W0LF - 22.6.2009, 01:14


--------------------
iOS developer
PM MAIL WWW Skype GTalk   Вверх
  
Ответ в темуСоздание новой темы Создание опроса

  • Прежде чем задать вопрос прочтите это!
  • Литература по Java находится здесь.
  • Литературу по Java обсуждаем здесь.
  • Используйте теги [code=java][/code] для подсветки кода. Используйтe чекбокс "транслит" (возле кнопок кодов) если у Вас нет русских шрифтов.
  • Действия модераторов можно обсудить здесь
  • С просьбами о написании курсовой, реферата и т.п. обращаться сюда

  • FAQ раздела лежит здесь!
 
1 Пользователей читают эту тему (1 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | Java ME (J2ME) | Следующая тема »


 




[ Время генерации скрипта: 0.0751 ]   [ Использовано запросов: 21 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.