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

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Возвращаемы данные от Демона, через определенное время 
:(
    Опции темы
barin_Student
Дата 11.4.2008, 09:26 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 488
Регистрация: 10.8.2007
Где: Казахстан , Алмат ы

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



Собственно вопрос , есть ли какая возможность перестать брать данные у демона , если он их не дает.
Вот такая вещь:
Код

public class demon extends Thread
{
     public boolean Beskonechny()
     {
          boolean status = false;
          while(true)
          {
               System.out.println("ne vieder");
           }
           return status;
      }
       
//  и метод run .....

а вот в другом классе я одемонизирую процесс , и попрошу статус у Beskonechny()
Код

   demon d = new demon();
   d.setDaemon(true);
   d.start();
   boolean oblom = d.Beskonechny();

вот вопрос , как спросить этот статус , и через какое то время неответа проскочить эту байду.
Да только без дополнительных методов в demon getStatus() и тд , возможно ли это ище какими то инструментами это решить. smile 


--------------------
Нехорошо блин!!!
PM MAIL   Вверх
LSD
Дата 11.4.2008, 12:57 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Leprechaun Software Developer
****


Профиль
Группа: Модератор
Сообщений: 15718
Регистрация: 24.3.2004
Где: Dublin

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



Как-то так:
Код

public class Test implements Runnable
{
  private static final Object LOCK = new Object();

  private Object result;
  private boolean isResultReady;

  public static void main(String[] args) throws Exception
  {
    Test test = new Test();
    new Thread(test).start();

    try
    {
      test.getResult(1000);
      System.out.println("getResult(1000) success");
    }
    catch(Exception e)
    {
      System.err.println("getResult(1000) failed");
      e.printStackTrace();
    }

    try
    {
      test.getResult(60 * 1000);
      System.out.println("getResult(60 * 1000) success");
    }
    catch(Exception e)
    {
      System.err.println("getResult(61 * 1000) failed");
      e.printStackTrace();
    }
  }

  public Object getResult(long timeout) throws InterruptedException, NotReadyException
  {
    synchronized(LOCK)
    {
      if(isResultReady)
        return result;

      LOCK.wait(timeout);
    }
    if(isResultReady)
      return result;
    else
      throw new NotReadyException();
  }

  public void run()
  {
    try
    {
      Thread.sleep(60 * 1000);
    }
    catch(InterruptedException e)
    {
      e.printStackTrace();
    }

    result = new Object();

    synchronized(LOCK)
    {
      isResultReady = true;
      LOCK.notifyAll();
    }
  }

  public static class NotReadyException extends Exception
  {
  }
}



--------------------
Disclaimer: this post contains explicit depictions of personal opinion. So, if it sounds sarcastic, don't take it seriously. If it sounds dangerous, do not try this at home or at all. And if it offends you, just don't read it.
PM MAIL WWW   Вверх
barin_Student
Дата 11.4.2008, 13:20 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 488
Регистрация: 10.8.2007
Где: Казахстан , Алмат ы

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



Я так понял , что в этом примере , мы ждем поток на ответ в течение секунды(а поток дает результат только через минуту) , после ожидания секунды.... Вопщем чего то я не понял , сорри что с такими просьбами обращаюсь , а если на моем примере добавить код (незнаю какой) чтоб ждал скажем 5 секунд , и посе неответа проходил (основной поток) дальше, не останавливался навсегда?... smile 


--------------------
Нехорошо блин!!!
PM MAIL   Вверх
LSD
Дата 11.4.2008, 13:37 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Leprechaun Software Developer
****


Профиль
Группа: Модератор
Сообщений: 15718
Регистрация: 24.3.2004
Где: Dublin

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



Основной метод тут это getResult(), ему передается таймаут в течении которого нужно ждать результат. Когда вызывается этот метод он захватывает блокировку на LOCK и проверяет не готов ли результат. Если рузультат готов, то он его просто возвращает, иначе засыпает на указанный таймаут. После пробуждения снова проверяет не готов ли результат и возвращает его или выбрасывает ошибку. Метод run() просто симулирует долгое создание объекта. Главное в нем это:
Код

synchronized(LOCK)
{
  isResultReady = true;
  LOCK.notifyAll();
}

после того как объект был создан.


--------------------
Disclaimer: this post contains explicit depictions of personal opinion. So, if it sounds sarcastic, don't take it seriously. If it sounds dangerous, do not try this at home or at all. And if it offends you, just don't read it.
PM MAIL WWW   Вверх
barin_Student
Дата 11.4.2008, 13:52 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 488
Регистрация: 10.8.2007
Где: Казахстан , Алмат ы

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



Ок спасибо , теперь ясно, после выходных разберусь. а счас просто поигрась с этим кодом, и тема пускай пока открыта , а к выходным я ее закрою.
Спасибо вам LSD. smile 


--------------------
Нехорошо блин!!!
PM MAIL   Вверх
barin_Student
Дата 14.4.2008, 07:26 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 488
Регистрация: 10.8.2007
Где: Казахстан , Алмат ы

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



Балин , с вашим кодом разобрался, все ясно и понятно... Но к своему коду прикрутить не получается , кто может хотябы прикрутить к моему примеру, в вот этот Лок до конца не понял... Буду благодарен если я вижу в привычном мне виде. smile  smile 


--------------------
Нехорошо блин!!!
PM MAIL   Вверх
LSD
Дата 14.4.2008, 11:02 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Leprechaun Software Developer
****


Профиль
Группа: Модератор
Сообщений: 15718
Регистрация: 24.3.2004
Где: Dublin

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



Чего там прикручивать, просто возьми и используй. Замени:
Код

    try
    {
      Thread.sleep(60 * 1000);
    }
    catch(InterruptedException e)
    {
      e.printStackTrace();
    }

    result = new Object();

на свой код создания объектов и все. При желании можешь переименовать методы.


--------------------
Disclaimer: this post contains explicit depictions of personal opinion. So, if it sounds sarcastic, don't take it seriously. If it sounds dangerous, do not try this at home or at all. And if it offends you, just don't read it.
PM MAIL WWW   Вверх
barin_Student
Дата 14.4.2008, 11:32 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 488
Регистрация: 10.8.2007
Где: Казахстан , Алмат ы

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



Код

public class Test
{
    demon d = new demon();   
    public static void main(String args[])
    {
        boolean s =d.Read(1000);
        System.out.println("Ura");
    }
}


Код

public class demon extends Thread
{
     public boolean Read(int timeOut)
     {
          boolean status= false;
          while(true)
          {
           }
          return status;
            
    }
}

и вот куда маньячить этот Object и тому подобное? ведь я вправду не знаю. smile 

Это сообщение отредактировал(а) barin_Student - 14.4.2008, 11:42


--------------------
Нехорошо блин!!!
PM MAIL   Вверх
barin_Student
Дата 14.4.2008, 13:53 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 488
Регистрация: 10.8.2007
Где: Казахстан , Алмат ы

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



И неужели никто кроме LCD с этим не сталкивался , и не может переделать мой пример под пример LCD  smile 

Это сообщение отредактировал(а) barin_Student - 14.4.2008, 13:54


--------------------
Нехорошо блин!!!
PM MAIL   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Правила форума "Java"
LSD   AntonSaburov
powerOn   tux
javastic
  • Прежде, чем задать вопрос, прочтите это!
  • Книги по Java собираются здесь.
  • Документация и ресурсы по Java находятся здесь.
  • Используйте теги [code=java][/code] для подсветки кода. Используйтe чекбокс "транслит", если у Вас нет русских шрифтов.
  • Помечайте свой вопрос как решённый, если на него получен ответ. Ссылка "Пометить как решённый" находится над первым постом.
  • Действия модераторов можно обсудить здесь.
  • FAQ раздела лежит здесь.

Если Вам помогли, и атмосфера форума Вам понравилась, то заходите к нам чаще! С уважением, LSD, AntonSaburov, powerOn, tux, javastic.

 
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | Java: Общие вопросы | Следующая тема »


 




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


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

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