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 кто-нибудь знает? :''((

ABTOMAT 30.08.2008 22:47

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

Сообщение от Kn793 (Сообщение 85416)
Ой наоффтопили.
Ну хотя бы goto кто-нибудь знает? :''((

http://forum.boolean.name/showthread.php?t=26

Kn793 30.08.2008 23:06

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

Сообщение от ABTOMAT (Сообщение 85418)

Эээ, мне как бы для MidletPascal.

Romanzes 30.08.2008 23:24

Ответ: Принудительный выход
 
А че, в MP разве есть goto?

Kn793 30.08.2008 23:34

Ответ: Принудительный выход
 
Так я и ищу замену.
Вообщем есть не малого объёма процедура, которую я решил перегнать из delphi в MP. В процедуре внутри всяких for,while, if... используется exit. Не знаю что делать.

Piligrim 30.08.2008 23:55

Ответ: Принудительный выход
 
хм, интересная задачка. В яве можно return вызвать в любом месте процедуры, а в МР об этом похоже забыли.

ABTOMAT 31.08.2008 00:55

Ответ: Принудительный выход
 
Это я к тому шо GoTo лажа

odd 31.08.2008 03:05

Ответ: Принудительный выход
 
Используй break. Ну а если там большая вложенность циклов, то придется добавлять целую цепочку условных break'ов.

Phantom 31.08.2008 03:31

Ответ: Принудительный выход
 
Кстати, на счёт return, давно хотел спросить. Если я в Java вызову ретун в середине процедуры, то ошибки не возникнет? Ретун просто возратит значение и завершит выполнение процедуры? Просто иногда бывает удобно, например, в цикле при получении нужного значения просто возратить ретун и всё. Иначе же придётся выйти из цикла, после этого вызвать ретун, но возможно, что после цикла ещё идёт код, который должен выполняться только если в цикле не нашлось требуемое значение. Надеюсь, меня поняли =)

odd 31.08.2008 10:13

Ответ: Принудительный выход
 
В Java return можно вызывать из любого места. Там такого головняка как в MP нет.

Kn793 31.08.2008 11:49

Ответ: Принудительный выход
 
А jar ведь можно декомпилировать, и вставить в нужных местах return. Так? Если да то скажите как это сделать.
З.Ы. С явой не работал, вопрос может глупый.

jimon 31.08.2008 11:52

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

Kn793 31.08.2008 12:42

Ответ: Принудительный выход
 
jimon, :-D . Но я не хочу переписывать процедуру из 174 строчек, которую я написал пол года назад и почти ничего в ней не понимаю, пусть лучше меня динозавр покусает :wallbash:
Так если кто знает про декомпиляцию напишите плизз.

odd 01.09.2008 08:04

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

Сообщение от Kn793 (Сообщение 85447)
jimon, :-D . Но я не хочу переписывать процедуру из 174 строчек, которую я написал пол года назад и почти ничего в ней не понимаю, пусть лучше меня динозавр покусает :wallbash:
Так если кто знает про декомпиляцию напишите плизз.

Если тебе охота потом править 1740 строчек, то вперед.
Большие участки кода на MP декомпилируются с ошибками. :wallbash:


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

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