forum.boolean.name

forum.boolean.name (http://forum.boolean.name/index.php)
-   Основной форум (http://forum.boolean.name/forumdisplay.php?f=49)
-   -   Принудительный выход (http://forum.boolean.name/showthread.php?t=4850)

VM 25.10.2007 10:46

Принудительный выход
 
Как принудительно выйти из процедуры. Нужна реализация типа паскалевского exit.

Eddy 25.10.2007 14:14

Re: Принудительный выход
 
из процедуры вроде break
а из мидлета вообще - halt

Piligrim 25.10.2007 14:32

Re: Принудительный выход
 
break не совсем из процедуры, из текущего оператора.

EVIL_USER 26.10.2007 01:28

Re: Принудительный выход
 
Кстати, сделал в одной проге выход по хальту, а она сцуко каждый раз по новой ресурсы распаковывает.
Нашел папку с её сейвами, а там куча одинаковых файлов со случайными именами.
При том, что у меня там из ресурсов одна вавка на 70 с лишним килов, память съедается весьма успешно.
Так что имхо лучше по человечески выходить.

impersonalis 26.10.2007 02:24

Re: Принудительный выход
 
Цитата:

Сообщение от EVIL_USER
Кстати, сделал в одной проге выход по хальту, а она сцуко каждый раз по новой ресурсы распаковывает.
Нашел папку с её сейвами, а там куча одинаковых файлов со случайными именами.
При том, что у меня там из ресурсов одна вавка на 70 с лишним килов, память съедается весьма успешно.
Так что имхо лучше по человечески выходить.

Не прогаю MidletPascal - чисто алгоритмические умозаключения:
HALT, насколько помню команда экстренного выхода. так что или не юзайте, или допишите процедуру очистки от мусора, которая выполняется при следующем после внештаного завершения запуске.

odd 26.10.2007 08:53

Re: Принудительный выход
 
break - это оператор выхода из цикла. Если в процедуре только один цикл (что врядли), то этого хватит. В противном же случае придется вводить дополнительную флаговую переменную, в кот. будет хранится скажем true - надо выходить, false - не надо пока, и перед началом каждого цикла или блока операторов проверять эту переменную.

Кстати, RecordStore - очень любопытная вещь. Мало того, что она на разных телах реализуется немножко по-разному, так ещё и хитрозадые программеры каким-то макаром сохраняют туда не только строки текста, но и мелодии и картинки.

Piligrim 26.10.2007 12:22

Re: Принудительный выход
 
Про RecordStore: туда можно сохранить практически все. Ведь мелодия и картинка это тоже байтовый массив если разобраться.

ViNT 26.10.2007 14:56

Re: Принудительный выход
 
Цитата:

Сообщение от impersonalis
Не прогаю MidletPascal - чисто алгоритмические умозаключения:
HALT, насколько помню команда экстренного выхода. так что или не юзайте, или допишите процедуру очистки от мусора, которая выполняется при следующем после внештаного завершения запуске.

Выход по halt абсолютно ничем не отличается от простого завершения программы(после последнего оперетора):

На основе кода на MP
Код:

program x;
begin
drawimage(loadimage(''),0,0);
halt;
end.

Генерится код на java:
Код:


        G.drawImage(Image.createImage(""), 0, 0, 20);//drawimage
      FW.fw.destroyApp(true);//halt
        Thread.currentThread().join();
        Thread.sleep(1000);
        FW.fw.destroyApp(true);//Завершение после
                                                              //последнего оперетора
    }

Как видно, между выделенными строками разницы нет, так что halt аналогичен простому завершению.

Piligrim 27.10.2007 01:03

Re: Принудительный выход
 
If true when this method is called, the MIDlet must cleanup and release all resources
Тоесть программа обязана убрать за собой перед завершением.

odd 27.10.2007 09:13

Re: Принудительный выход
 
Цитата:

Сообщение от pilgrim
Про RecordStore: туда можно сохранить практически все. Ведь мелодия и картинка это тоже байтовый массив если разобраться.

Так если бы в самом RS всё хранилось - нет ничего удивительного, а то прям рядом с файлом ресурсов лежит файл скажем .wav или .mid. Например, как в Семёнах:
1. На основании тела программы/игры генерится числовое название папки, например 12345.
2. Папка размещается в системной папке Data:/System/java (папка скрытая)
3. В этой папке генерится файл RMS_RC.db, в котором хранятся названия разделов RecordStore и ссылки на файлы типа [email protected], [email protected] и т.п. в кот. и хрянятся ресурсы.

Надо будет декомпильнуть пару тройку программ и посмотреть как они это делают. В идеале это даёт неплохой выигрыш по скорости при загрузке графики/мелодий, ведь в RecordStore они хранятся в незапакованном виде. Но для пользователей гимор - если удалить прогу, её RecordStore может остаться и засорять память телефона.

ViNT 27.10.2007 13:47

Re: Принудительный выход
 
Помоему все это делается на уровне виртуальной машины или сразу при установке приложения.

impersonalis 27.10.2007 15:00

Re: Принудительный выход
 

odd не пугай меня - любителя всевозможных утилит на трубке

ARV 27.10.2007 15:28

Re: Принудительный выход
 
если прога удаляется средствами системы телефона (а не всякими утилитами доступа к "диску" мобилки), то вместе с нею удаляются и файлы RS. А создаются они самой программой, файлы в системной папке - когда мы пишем в RecordStore - фактически пишем в те самые файлы... Система организует записи в виде базы данных - файл-индекс и файлы-таблицы записей, потому их всегда минимум 2...
Очень рекомендую при работе с RS при считывании контролировать целостность данных и сразу исправлять (т.е. перезаписывать значениями по дефолту), если они там некорректны... А то вот у программы ClimateControl это было не сделано, в результате однажды, когда связь с инетом была плохая, я ее вырубил принудительно, и в RS остались какие-то левые записи, после чего прога грузиться не захотела... Пришлось переустанавливать...

Piligrim 29.10.2007 00:04

Re: Принудительный выход
 
odd, это специфика хранения данных на семенах, не стоит их переносить на всех производителей.
ЗЫ: по-моему мы слегка ушли от темы :)

Kn793 30.08.2008 21:50

Ответ: Принудительный выход
 
Ой наоффтопили.
Ну хотя бы goto кто-нибудь знает? :''((


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

vBulletin® Version 3.6.5.
Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
Перевод: zCarot