Извините, ничего не найдено.

Не расстраивайся! Лучше выпей чайку!
Регистрация
Справка
Календарь

Вернуться   forum.boolean.name > Программирование игр для мобильных телефонов > JAVA Micro Edition > Программирование

Программирование Вопросы связанные с программированием в JAVA

Ответ
 
Опции темы
Старый 17.03.2011, 17:15   #1
Doctor Drive
Нуждающийся
 
Аватар для Doctor Drive
 
Регистрация: 28.01.2009
Сообщений: 65
Написано одно полезное сообщение
(для 2 участников)
Синхронизация тредов

У меня есть поток канвасный, в котором прорисовываеться консоль, но консоль не успевает.
Нужно сделать чтобы тред из которого вызываеться действие в консоли подождал пока консоль прорисует.




Ситуация такая.


Session.java

    Main.main.log.write("HTTP " + responsecode + " " + net.getResponseMessage(), obj);
    //TODO: тут надо подождать пока там прорисует

Log.java:

    public void write(String tex) {     //этот метод мы вызываем
        if ((tex != null) && (!tex.equals(""))) {
            action = true; //чтобы установить флажок на рсование
            synchronized(texts) {
                texts.addElement(tex); //и добавить в очередь что надо написать
            } //TODO избавиться очереди.
        }
    }
    public void run() {
        while (true) {
            try {
                Thread.sleep(10);
            }
            catch (InterruptedException ie) { }
            if (action) repaint();
        }

    }
    public void paint(Graphics g) {
        if (action) {
            //рисуем
            action = false;
        }
    }
(Offline)
 
Ответить с цитированием
Старый 17.03.2011, 18:38   #2
Doctor Drive
Нуждающийся
 
Аватар для Doctor Drive
 
Регистрация: 28.01.2009
Сообщений: 65
Написано одно полезное сообщение
(для 2 участников)
Ответ: Синхронизация тредов

Попробовал так:

Класс Main

    public void wait1() {
        while (true) {
            try { Thread.sleep(10); }
            catch (Exception e) {}
            synchronized(log.texts) {
                if (log.texts.size() == 0) break; //так как когда оно все закончит, вектор будет пуст
            }
        }
    }

И с любого класса, когда прорисовываем, сразу заходим в метод ждалки
            Main.main.log.write(path);
            Main.main.wait1();
И получаем deadlock...
(Offline)
 
Ответить с цитированием
Старый 30.03.2011, 07:07   #3
Жека
Дэвелопер
 
Регистрация: 04.09.2005
Адрес: Красноярск
Сообщений: 1,376
Написано 491 полезных сообщений
(для 886 пользователей)
Ответ: Синхронизация тредов

Самое простое - использовать "связку" из двух команд

repaint();
serviceRepaint();
(Offline)
 
Ответить с цитированием
Ответ


Опции темы

Ваши права в разделе
Вы не можете создавать темы
Вы не можете отвечать на сообщения
Вы не можете прикреплять файлы
Вы не можете редактировать сообщения

BB коды Вкл.
Смайлы Вкл.
[IMG] код Вкл.
HTML код Выкл.


Часовой пояс GMT +4, время: 03:49.


vBulletin® Version 3.6.5.
Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
Перевод: zCarot
Style crйe par Allan - vBulletin-Ressources.com