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

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

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

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

Ответ
 
Опции темы
Старый 18.11.2008, 04:43   #1
Phantom
Элита
 
Аватар для Phantom
 
Регистрация: 14.06.2008
Адрес: Украина, Киев
Сообщений: 2,273
Написано 754 полезных сообщений
(для 1,833 пользователей)
Плохо Аналог паскалевского Delay без введения потока.

Можно ли как-нибудь сделать задержку при выполнении программы без введения потока?
(Offline)
 
Ответить с цитированием
Старый 17.03.2011, 17:19   #2
Doctor Drive
Нуждающийся
 
Аватар для Doctor Drive
 
Регистрация: 28.01.2009
Сообщений: 65
Написано одно полезное сообщение
(для 2 участников)
Ответ: Аналог паскалевского Delay без введения потока.

Thread.currentThread().sleep(1000);
(Offline)
 
Ответить с цитированием
Эти 2 пользователя(ей) сказали Спасибо Doctor Drive за это полезное сообщение:
Phantom (18.03.2011), viktor (23.01.2012)
Старый 18.03.2011, 00:55   #3
Romanzes
Разработчик
 
Аватар для Romanzes
 
Регистрация: 06.04.2008
Сообщений: 541
Написано 196 полезных сообщений
(для 638 пользователей)
Ответ: Аналог паскалевского Delay без введения потока.

sleep(int millis) - это статический метод класса Thread, поэтому можно обращаться просто как Thread.sleep(1000); И InterruptedException ловить не забываем.
(Offline)
 
Ответить с цитированием
Эти 2 пользователя(ей) сказали Спасибо Romanzes за это полезное сообщение:
Phantom (18.03.2011), viktor (23.01.2012)
Старый 18.03.2011, 00:56   #4
Phantom
Элита
 
Аватар для Phantom
 
Регистрация: 14.06.2008
Адрес: Украина, Киев
Сообщений: 2,273
Написано 754 полезных сообщений
(для 1,833 пользователей)
Ответ: Аналог паскалевского Delay без введения потока.

Два с половиной года, блеать, я ждал ответа на этот вопрос. Спасибо вам, парни, теперь я могу спокойно спать по ночам.
(Offline)
 
Ответить с цитированием
Эти 11 пользователя(ей) сказали Спасибо Phantom за это полезное сообщение:
BlackOut (16.04.2014), den (22.03.2011), Doctor Drive (18.03.2011), Dream (01.05.2011), Igor (18.03.2011), impersonalis (18.03.2011), im_zorg (24.05.2011), L.D.M.T. (25.01.2014), odd (19.03.2011), Randomize (25.01.2014), Romanzes (18.03.2011)
Старый 23.01.2014, 16:53   #5
Zorko
AnyKey`щик
 
Регистрация: 18.07.2012
Сообщений: 4
Написано 0 полезных сообщений
(для 0 пользователей)
Ответ: Аналог паскалевского Delay без введения потока.

Всем привет! Накопилась парочка вопросов.

Сообщение от Romanzes Посмотреть сообщение
И InterruptedException ловить не забываем.
Вопрос №1: насколько важно ловить InterruptedException в данном случае? Я смотрел чужие исходники на Java ME и видел как люди часто пихают обработку исключений где надо и где не надо. Не то чтобы я не сторонник такого подхода, надёжность важнее, но интересно знать наверняка какие именно исключения могут прийти при вызове Thread.sleep на реальном железе? Что именно может помешать телефону впасть в спячку?

Вопрос №2: допустимо ли, ожидая событие (например, нажатие кнопки), периодически опрашивать состояние события (переменной, которую устанавливает метод lcdui.Canvas.keyPressed в отдельном потоке) с последующим засыпанием на 1 мс по Thread.sleep(1)? Т.е. не будет ли такой код создавать излишнюю нагрузку на телефон? (ну может лучше до 10 мс увеличить время ожидания, например):

  while(!keyPressed) {
    try
    {
      Thread.sleep(1);
    }
    catch (InterruptedException e)
    {
      ;
    }
  }
Приветствуются компетентные ответы. Неохота работать наобум, интересно узнать что происходит на самом деле.
(Offline)
 
Ответить с цитированием
Старый 25.01.2014, 02:29   #6
Igor
Мастер
 
Аватар для Igor
 
Регистрация: 03.05.2010
Адрес: Подмосковье
Сообщений: 1,218
Написано 438 полезных сообщений
(для 790 пользователей)
Ответ: Аналог паскалевского Delay без введения потока.

Я пишу метод, чтобы не писать по нескольку раз 4 строчки.
protected void delay(long time) {
        try {
            
Thread.sleep(time);
        } catch (
InterruptedException e) {
        }
    } 
Есть смутное подозрение, что время сна округляется до неких значений. Лучше всего вручную взять и померять - засечь время выполнения 100 вызовов delay(1).
Время реакции человека порядка 100мсек. (А иначе в спорте засчитывают фальшстарт) Экран обновляется порядка 20-40 мсек, т.е, обновляться бегать в цикло сильно чаще смысла нет. 10-20 мсек точно хватит, меньше нет смысла делать.
P.S. Насколько delay(1) хуже для батареи телефона - не понятно. Наверно, разницы практически нет.
__________________
О¯О ¡¡¡ʁɔvʎнdǝʚǝdǝu dиW
(Offline)
 
Ответить с цитированием
Старый 25.01.2014, 06:50   #7
Жека
Дэвелопер
 
Регистрация: 04.09.2005
Адрес: Красноярск
Сообщений: 1,376
Написано 491 полезных сообщений
(для 886 пользователей)
Ответ: Аналог паскалевского Delay без введения потока.

Canvas.keyPressed - это системная функция, она и так в отдельном потоке обрабатывается. Внутрь этой функции не нужно помещать логику программы, здесь нужно запомнить нажатую кнопку, и логику нажатия обрабатывать в твоем главном цикле.
(Offline)
 
Ответить с цитированием
Старый 25.01.2014, 12:12   #8
SBJoker
Злобный Админ
 
Аватар для SBJoker
 
Регистрация: 04.09.2005
Сообщений: 5,926
Написано 3,415 полезных сообщений
(для 9,330 пользователей)
Ответ: Аналог паскалевского Delay без введения потока.

Сообщение от Igor Посмотреть сообщение
Экран обновляется порядка 20-40 мсек, т.е, обновляться бегать в цикло сильно чаще смысла нет. 10-20 мсек точно хватит, меньше нет смысла делать.
P.S. Насколько delay(1) хуже для батареи телефона - не понятно. Наверно, разницы практически нет.
Обычно операционные системы с вытесняющей многопоточностью по команде delay передают управление следующему в очереди потоку, так же обычно квант времени в таких системах значительно превышает 1мс, и нередко составляет около 10мс и больше. Некоторые потоки могут дополнительно удерживать процессор, что увеличивает время их монопольного владения.

Следовательно никак нельзя быть уверенным что delay будет создавать именно указанную задержку, особенно если она мала. Разница между delay(1) и delay(100) только в том насколько много процессов успеют выполнится в этот промежуток времени.
__________________
(Offline)
 
Ответить с цитированием
Эти 3 пользователя(ей) сказали Спасибо SBJoker за это полезное сообщение:
impersonalis (25.01.2014), nil0q (28.01.2014), Phantom (25.01.2014)
Старый 30.01.2014, 00:49   #9
Zorko
AnyKey`щик
 
Регистрация: 18.07.2012
Сообщений: 4
Написано 0 полезных сообщений
(для 0 пользователей)
Ответ: Аналог паскалевского Delay без введения потока.

Кстати, есть ещё Thread.yield()
Но не знаю насколько есть смысл в этом методе именно на Java ME.

Жека, я не помещаю логику программы внутрь Canvas.keyPressed.
Моя keyPressed это переменная, которая устанавливается внутри Canvas.keyPressed. Если код кажется слегка не таким как вы привыкли, то это потому что я его на Java переписал чтобы вам было лучше понятно.
(Offline)
 
Ответить с цитированием
Старый 30.01.2014, 07:26   #10
Жека
Дэвелопер
 
Регистрация: 04.09.2005
Адрес: Красноярск
Сообщений: 1,376
Написано 491 полезных сообщений
(для 886 пользователей)
Ответ: Аналог паскалевского Delay без введения потока.

Сообщение от Zorko Посмотреть сообщение
Жека, я не помещаю логику программы внутрь Canvas.keyPressed.
Моя keyPressed это переменная, которая устанавливается внутри Canvas.keyPressed. Если код кажется слегка не таким как вы привыкли, то это потому что я его на Java переписал чтобы вам было лучше понятно.
окей я так, на всякий случай заострил внимание.
у меня в проге была проблема - метод keyPressed() прерывал выполнение paint().
Сообщение от Zorko Посмотреть сообщение
Кстати, есть ещё Thread.yield()
Но не знаю насколько есть смысл в этом методе именно на Java ME.
Новые версии NetBeans, в частности 7.4, подчёркивают строку Thread.yield() и говорят вот что:
Invocation of method yield() on java.lang.Thread is usually used to masquerade synchronization problems and should be avoided.
рекомендует избегать этот метод.
как оно на самом деле, и тем более в джава-машинах разных телефонов - не ясно.
(Offline)
 
Ответить с цитированием
Ответ


Опции темы

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

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

Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
canvas: аналог GetPixel или как ? Tronix Основной форум 23 08.01.2012 13:04
Fraps-аналог impersonalis Болтовня 20 16.10.2010 02:44
Повторный запуск потока -=Jack=- Программирование 1 13.09.2009 20:32
Аналог FloatToString DmT MidletPascal 3 08.11.2007 08:13
аналог imagefromimage Eddy Основной форум 3 20.08.2006 23:17


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


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