Форум программистов, компьютерный форум, киберфорум
Наши страницы
Программирование Android
Войти
Регистрация
Восстановить пароль
 
 
yotsi
0 / 0 / 1
Регистрация: 12.08.2014
Сообщений: 124
#1

Как забрать данные из отработавшего потока? - Программирование Android

16.10.2014, 14:41. Просмотров 1258. Ответов 22
Метки нет (Все метки)

Код в потоке сгенерил массив интов и завершился.Как забрать данные?
ЗЫ:в жабе есть какой то аналог WaitForSingleObject ?
http://www.cyberforum.ru/android-dev/thread1272616.html
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
16.10.2014, 14:41
Я подобрал для вас темы с готовыми решениями и ответами на вопрос Как забрать данные из отработавшего потока? (Программирование Android):

Как правильно забрать данные
Доброе вечер, уважаемые форумчане!) Столкнулся с токой проблемой, что не знаю...

Как забрать данные из ячейки?
Проблема состоит в том что у меня есть две таблицы и при выборе в первой...

Как забрать из clipboard данные?
Подскажите, плиз, как забрать из буфера обмена (clipboard) данные? Я пользуюсь...

Как забрать данные из ActionListener
День добрый, интересует как забрать данные из ActionListener? По нажатию кнопки...

Как правильней забрать данные
Доброе утро, уважаемые форумчане!) Столкнулся с токой проблемой, что не знаю...

22
YuraAAA
1578 / 1319 / 282
Регистрация: 25.10.2009
Сообщений: 3,436
Записей в блоге: 2
16.10.2014, 14:52 #2
yotsi, Handler/Async task.
0
Pablito
2652 / 2134 / 727
Регистрация: 12.05.2014
Сообщений: 7,447
Завершенные тесты: 1
16.10.2014, 14:58 #3
или http://docs.oracle.com/javase/7/docs...utureTask.html
0
yotsi
0 / 0 / 1
Регистрация: 12.08.2014
Сообщений: 124
16.10.2014, 15:10  [ТС] #4
А если Thread наследовать то ни как?
0
KillAndEat
63 / 63 / 8
Регистрация: 17.05.2013
Сообщений: 286
16.10.2014, 16:42 #5
yotsi, можете использовать интерфейс Callable он подразумевает возврат результата.
0
yotsi
0 / 0 / 1
Регистрация: 12.08.2014
Сообщений: 124
16.10.2014, 20:28  [ТС] #6
Цитата Сообщение от KillAndEat Посмотреть сообщение
Callable
Костыль настолько зверский что нигде нету понятных примеров((((
0
KillAndEat
63 / 63 / 8
Регистрация: 17.05.2013
Сообщений: 286
16.10.2014, 23:00 #7
yotsi, почему костыль? Довольно удобный интерфейс.

Что там непонятного? Для начала нужно создать объект
Java
1
Future<возвращаемый тип данных> f
, далее создать экзекутор
Java
1
ExecutorService executorService  = Executors.newFixedThreadPool(5);//например
, потом все это дело нужно запустить
Java
1
2
3
4
f = executorService.submit(new Callable<возвращаемый тип данных>() {
            @Override
            public возвращаемый тип данных call(){}
});
ну и затем вытащить из Future результат путем вызова метода get();(этот метод лочит выполнение программы до отработки Callable), или подождать отработки вот таким способом
Java
1
2
3
while (!f.isDone()){
            //w8
        }
а затем при помощи того же get() вытащить результат
0
yotsi
0 / 0 / 1
Регистрация: 12.08.2014
Сообщений: 124
16.10.2014, 23:05  [ТС] #8
Цитата Сообщение от KillAndEat Посмотреть сообщение
Довольно удобный интерфейс
Удобно это когда есть полноценный указатель на память,а не ООП изврат
0
KillAndEat
63 / 63 / 8
Регистрация: 17.05.2013
Сообщений: 286
16.10.2014, 23:41 #9
yotsi, в таком случае рекомендую Вам вернуться в С
0
yotsi
0 / 0 / 1
Регистрация: 12.08.2014
Сообщений: 124
17.10.2014, 15:46  [ТС] #10
1.Что есть "экзекутор" ?
2.Что если потоков несколько?
3.Не вижу абсолютной никакой связи между данными в классе потока и этим "Future".
ЗЫ: вообще самый непонятный пример по "Callable" что я когда либо видел.
0
YuraAAA
1578 / 1319 / 282
Регистрация: 25.10.2009
Сообщений: 3,436
Записей в блоге: 2
17.10.2014, 15:48 #11
yotsi, загляните в соседнюю тему

Добавлено через 51 секунду
Цитата Сообщение от yotsi Посмотреть сообщение
1.Что есть "экзекутор" ?
механизм исполнения и контроля потоков

Цитата Сообщение от yotsi Посмотреть сообщение
2.Что если потоков несколько?
На здоровье
0
KillAndEat
63 / 63 / 8
Регистрация: 17.05.2013
Сообщений: 286
17.10.2014, 16:52 #12
yotsi, Future это и есть результат выполнения потока, только он пуст пока поток работу не завершит.
0
yotsi
0 / 0 / 1
Регистрация: 12.08.2014
Сообщений: 124
17.10.2014, 17:40  [ТС] #13
Цитата Сообщение от KillAndEat Посмотреть сообщение
Future это и есть результат выполнения потока, только он пуст пока поток работу не завершит.
так а return в каком месте потока делать то?
0
KillAndEat
63 / 63 / 8
Регистрация: 17.05.2013
Сообщений: 286
17.10.2014, 18:56 #14
yotsi, в конце метода call()
0
yotsi
0 / 0 / 1
Регистрация: 12.08.2014
Сообщений: 124
18.10.2014, 18:07  [ТС] #15
Цитата Сообщение от KillAndEat Посмотреть сообщение
в конце метода call()
Для какого случая?
Handlers,AsyncTask,Thread
???

Добавлено через 22 часа 27 минут
так как можно, например отсюдого:
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
class GenArr extends Thread
{
    private int arSZ;
    private int min;
    private int max;
    private int []aRR;
    Random r;
    public GenArr(int arSz,int MIN,int MAX)
    {
        this.arSZ=arSz;
        this.min=MIN;
        this.max=MAX;
        this.aRR=new int[this.arSZ];
    }
    @Override
    public void run()
    {
        this.r = new Random();
        this.r.setSeed(System.currentTimeMillis());
        for(int i=0;i<this.arSZ;i++)
        {
            this.aRR[i]=this.r.nextInt(max - min) + min;
        }
    }
}
Вывести результат работы потока?
0
YuraAAA
1578 / 1319 / 282
Регистрация: 25.10.2009
Сообщений: 3,436
Записей в блоге: 2
18.10.2014, 18:30 #16
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
class GenArr extends Thread
{
    private android.os.Handler handler;
    private int arSZ;
    private int min;
    private int max;
    private int []aRR;
    Random r;
    public GenArr(Handler handler, int arSz,int MIN,int MAX)
    {
        this.handler = handler;
        this.arSZ=arSz;
        this.min=MIN;
        this.max=MAX;
        this.aRR=new int[this.arSZ];
    }
    @Override
    public void run()
    {
        this.r = new Random();
        this.r.setSeed(System.currentTimeMillis());
        for(int i=0;i<this.arSZ;i++)
        {
            this.aRR[i]=this.r.nextInt(max - min) + min;
        }
        handler.post(new Runnable() { 
             @Override
             public void run() {
                  textView.setText("Done");
              }
    });
}
писал на коленке, проверьте.
0
yotsi
0 / 0 / 1
Регистрация: 12.08.2014
Сообщений: 124
18.10.2014, 21:10  [ТС] #17
YuraAAA, Я вас не понимаю.При чем здесь это:
Java
1
textView.setText("Done");
???????????

Добавлено через 17 минут
ЗЫ: что вернет Thread::getState() после завершения Thread::run() - WAITING или TERMINATED ?
0
YuraAAA
1578 / 1319 / 282
Регистрация: 25.10.2009
Сообщений: 3,436
Записей в блоге: 2
19.10.2014, 11:40 #18
yotsi,
Цитата Сообщение от yotsi Посмотреть сообщение
Вывести результат работы потока?
Вот что это. А что Вам надо сделать с ним?

Цитата Сообщение от yotsi Посмотреть сообщение
ЗЫ: что вернет Thread::getState() после завершения Thread::run() - WAITING или TERMINATED ?
Зачем Вам это?
0
yotsi
0 / 0 / 1
Регистрация: 12.08.2014
Сообщений: 124
19.10.2014, 21:32  [ТС] #19
В общем все как всегда... После нескольких дней без результативных попыток найти что то в РУ, все решилось 20 минутами гугления на инглише.
Сделал через Runnable. Может кому из новичков будет полезно.Вот:
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
class GenArr implements Runnable
{
    private int arSZ;
    private int min;
    private int max;
    private int []aRR;
    Random r;
    public GenArr(int arSz,int MIN,int MAX,Random R)
    {
        this.arSZ=arSz;
        this.min=MIN;
        this.max=MAX;
        this.aRR=new int[this.arSZ];
        this.r=R;
    }
    @Override
    public void run()
    {
        for(int i=0;i<this.arSZ;i++)
        {
            this.aRR[i]=Color.argb(255,r.nextInt(max - min) + min, r.nextInt(max - min) + min, 
                    r.nextInt(max - min) + min);
        }
    }
    public int[] getThResult()
    {
        return this.aRR;
    }
}
/***********************************************/
        GenArr gar=new GenArr(this.widthScr*this.heighScr,0,255,this.R);
        Thread thr=new Thread(gar);
        thr.start();
        try {
            thr.join();
        } catch (InterruptedException e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
        }
        this.colArr=gar.getThResult();
/***********************************************/
ЗЫ: учусь дальше параллелить задачи в потоки на жабе.

Добавлено через 4 часа 26 минут
Подскажите как в жабе называеться такая штука - в классе родительского потока объявляться метод, указатель на который передается в дочерний поток, из которого вызовом этого метода данные передаются назад в родительский поток?
0
YuraAAA
1578 / 1319 / 282
Регистрация: 25.10.2009
Сообщений: 3,436
Записей в блоге: 2
20.10.2014, 15:55 #20
Цитата Сообщение от yotsi Посмотреть сообщение
thr.join();
что повесит вызывающий поток (скорее всего UI).
0
20.10.2014, 15:55
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
20.10.2014, 15:55
Привет! Вот еще темы с решениями:

Как забрать данные из необычной формы?
Вот такая форма: http://i.imgur.com/hr1MeVQ.png Не получается забрать из неё...

Как забрать данные из JTextField по нажатию кнопки
Доброе время суток ! Прошу помощи разобраться и какую информацию нужно...

Как из datagridview забрать данные в текстовый файл?
Есть программа, которая работает с текстовым файлом(вложение &quot;Суточные...

Как забрать данные на IIS сервер с локальной машины по dial up?
Не соображу, как решить задачу. Допустим, на локальном компьютере есть данные...


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

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

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