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

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

Войти
Регистрация
Восстановить пароль
 
rugga
0 / 0 / 0
Регистрация: 10.02.2014
Сообщений: 71
#1

Доступ к потоку из разных потоков - Программирование Android

30.05.2015, 16:06. Просмотров 186. Ответов 0
Метки нет (Все метки)

Java
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
private Handler Ocnova = new Handler(); 
private Object sync = new Object();  private potok2 thread2 = null;
 
class potok2 extends Thread {
public boolean motion = false;
//...   
    public void run() {
        while(motion) {
            //...
        }
    }
}
class potok1 extends Thread {
//...String mes.....
   public void run() {
      while(true) {
         //.. socket.read(); // ждем пока не получим mes
         if("start".compareTo(mes) == 0) {
            synchronized(sync) { 
                Ocnova.post(new hand(this, mes)); // вот здесь работает коряво (Текст не отображает, как надо)
                try {sync.wait();} catch (InterruptedException e) {  }
            }
         }
         else if("stop".compareTo(mes) == 0) {
             synchronized(sync) {
                if (thread2 != null && thread2.isAlive() == true) { // если поток2 жив, останавливаем его (thread2 объявлен глобально)
                    thread2.motion = false; thread2.interrupt(); try{ thread2.join(3000); }catch(InterruptedException e){  } thread2 = null;
                }
            }
            break;
         }
      }
   }
}
//GUI-Thread
//...
if(условие) { new potok1().start(); }
//...
class hand implements Runnable {
    private potok1 thread1 = null; private String mes = null;
    public Potok4(potok1 thread1, String mes) {this.mes = mes; this.thread1 = thread1;}
    //...
    public void run() {
        synchronized(sync) {//ecли убрать отсюда thread2, все работает норм, когда же тут стоит thread2 тексты отоброжаются коряво.
            //... 
            if(всякие проверки, которые работаю только в gui) {
                if (thread2 == null || thread2.isAlive() == false) { // если поток2 не запущен, запускаем его (thread2 объявлен глобально)
                    tx1.setText("Поток2 не запущен, запускаем...");
                    thread2 = new potok2(); thread2.motion = true; thread2.start();
                }
                else {
                    tx1.setText("Поток2 уже работает");
                }
            }
            else {
                tx1.setText(mes);
            }
            sync.notify();
        }
   }
}
В общем есть "три" потока: gui-поток, potok1, potok2. Экземпляры класса potok1 запускаются в новом потоке из gui-потока. Экземпляр класса potok2 объявлен глобально, его нужно запускать в новом потоке из gui-потока, и останавливать из потока potok1.
Вот в чем проблема:
Из potok1 нам нужно обращаться к методам(гр. интерфейсу), которые работают только в GUI, поэтому использую Handler. Но даже, если использую Handler, текст коряво отображается или вовсе не отображается. Такое происходит только, если внутри класса hand находится thread2. Если его убрать из hand, все работает нормально. Но мне ведь нужно внутри hand делать манипуляции с thread2, например запустить его. В чем ошибка и как его устранить?
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
30.05.2015, 16:06
Здравствуйте! Я подобрал для вас темы с ответами на вопрос Доступ к потоку из разных потоков (Программирование Android):

Доступ к базе данных из разных активити - Программирование Android
В общем-то в теме и вопрос, как получить доступ к базе данных и разных активити? Есть класс работы с базой class DBHelper extends...

Обращение из сервиса к основному (UI) потоку - Программирование Android
как сделать так чтобы из сервиса можно было обращаться к основному потоку в котором находится UI ? изменять UI возможно ли это и если...

.NET 4.x Доступ к БД с разных потоков - C#
как реализовать доступ к одной базе данных с разных потоков? когда один сервер обрабатывает несколько клиентов то у меня выходит...

доступ к стриму из разных потоков - C#
Задача такая, имеем мемористрим, в одном потоке постоянно пишем его. В другом потоке необходимо по запросу считывать весь поток в...

Доступ к очереди из разных потоков - C#
Подскажите по многопоточности, у меня есть очередь (Queue) и мне надо организовать к ней доступ из разных потоков, выискал несколько...

Доступ к функции с разных потоков C++ Builder - C++ Builder
Как правильно объявить/создать функцию в C++Builder, чтобы она была доступна со всех потоков, включая главный? И как потом в этой функции...

0
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
30.05.2015, 16:06
Привет! Вот еще темы с ответами:

Обезопасить доступ к коллекции из разных потоков - C#
станет ли безопасным метод AddSafe? public static MyCollection myCol = new MyCollection(); class MyCollection:...

Обеспечить корректный доступ к элементу из разных потоков - C# WPF
Возникла такая проблема. Есть приложение и в приложение есть элемент, к которому прикреплён некий код, который долго выполняется из-за...

.NET 4.x Разграничить переменную result при создании потоков, что бы результат был по каждому потоку - C#
Добрый день! Не силен в прогарммировании не судите строго. Подскажите как побороть такую задачу: 1.Из веб формы получаю данные и...

Получить доступ к другому потоку - C#
В классе 1 есть поток, из этого класса запускается функция 2 класса у которой все действия выполняются тоже в отдельном потоке. 1 класс...


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

Или воспользуйтесь поиском по форуму:
1
Ответ Создать тему
Опции темы

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