Все для Sony Ericsson, патчи, эльфы, моддинг, прошивка
  
Логин: Пароль: Запомнить: Привет гость! Зарегистрируйся или авторизируйся для получения доп. возможностей!
Разделы
PDA версия сайта
TrackIDentify
Новости
Статьи
Файлы
Патчи
Патчи A2
Патчи db2020
Эльфы
Исходники эльфов
Wiki
Форум
Опросы
Обратная связь
Развернуть/Свернуть
 
Развернуть/Свернуть

Урок - Оптимизация кода эльфа : Эльфостроение : Эльфы : Форум : Для Sony Ericsson патчи эльфы моддинг прошивка
/  Список форумов
   /  Эльфы
      /  Эльфостроение
   /  Урок - Оптимизация кода эльфа
На печать 
Правила 


vodoo999


Пользователь


Регистрация: 16.2.09
Сообщений: 93
Репутация: 83
Откуда: Харьков UA




 
  #1 [07.11.09, 22:13] Урок - Оптимизация кода эльфа   

 
Как и обещал - сегодня мы поговорим об улучшении (доработке) нашего эльфа.

Важно! Чтобы было понятно о чем идет речь в этом уроке - смотрим тут Урок - Создание/редактирование простого эльфа (подробно).

Добавим код, который отключит возможность запуска нескольких копий эльфа (если, к примеру, по ошибке пару раз запустить эльф, нажав на него - Hello_World_main.elf, то в Букменеджере мы увидим:



Запуск нескольких копий эльфа ни к чему хорошему не приводит (Heap используется зря - в лучшем случае).

И так начнем

1) Нам потребуется код нашего эльфа:

Жми сюда: 


2) Добавляем следующий код, который отвечает за защиту от запуска нескольких копий эльфа:

int myFind(BOOK* book)
{
if(!strcmp(book->xbook->name,"HelloWorld")) return(1);
return(0);
}

int main (void)
{
if (FindBook(myFind))
{
MessageBox(0x6fFFFFFF,STR("уже запущен"),0, 1 ,5000,0);
SUBPROC(elf_exit);
}
else
{
CreateHWBook();
StatusIndication_ShowNotes(STR("Я написал эльф! Ура!"));
return(0);
}
}


Что важно знать при добавлении этого кода?

а) Функция

int myFind(BOOK* book)
{
if(!strcmp(book->xbook->name,"HelloWorld")) return(1);
return(0);
}


отвечает за поиск в памяти телефона книги (book) с названием HelloWorld, т.е. ищет запущен ли наш эльф или нет.

б) name,"HelloWorld" должно совпадать с названием нашего эльфа, т.е. с названием эльфа в строке -
CreateBook(HWBook,onCloseHWBook,&base_page,"HelloWorld",-1,0);

в) Если имена не будут совпадать - функция int myFind(BOOK* book) не найдет запущен ли наш эльф в памяти (т.к. имя не совпадает) и не произойдет следующее:

if (FindBook(myFind))
{
MessageBox(0x6fFFFFFF,STR("уже запущен"),0, 1 ,5000,0);
SUBPROC(elf_exit);


- не появится сообщение на экране "уже запущен" (за вывод сообщения на экран отвечает функция MessageBox(0x6fFFFFFF,STR("уже запущен"),0, 1 ,5000,0);) и не произойдет выгрузка ("убийство") эльфа (функция - SUBPROC(elf_exit);).

Т.е. если имя в этой строке if(!strcmp(book->xbook->name,"HelloWorld")) return(1); не совпадет с именем в этой строке CreateBook(HWBook,onCloseHWBook,&base_page,"HelloWorld",-1,0); мы сможем запустить наш эльф несколько раз -



А мы этого не хотим :oops:

г) В строке MessageBox(0x6fFFFFFF,STR("уже запущен"),0, 1 ,5000,0); - мы можем менять сообщение "уже запущен" на любое другое. Например, на такое: HelloWorld is running... -

MessageBox(0x6fFFFFFF,STR("HelloWorld is running..."),0, 1 ,5000,0);


Было:



Стало:



3) Получаем в итоге следующий код:

Жми сюда: 


4) При попытке повторного запуска эльфа на экране телефона мы видим следующее сообщение:



5) В Букменеджере запущен только один эльф (больше нет возможности запустить эльф HelloWorld несколько раз):



PS: В следующем уроке будем создавать выполнение действия эльфом ("запуск" эльфа) на нажатие кнопки.



Прикрепленный к сообщению файл:

Urok_2.zip Urok_2.zip (494.45 kb; 32 hits) Скачать файл


"Valetudo est bonum optimum"

K800 => K810 R8BA024 CID 53
Спасибо сказали: SidMeyer, ENSAIER, INZER, Olegat0r, ELECTRO-NIC

den_po


Developer/Admin


Регистрация: 27.3.06
Сообщений: 3278
Репутация: 10763
Откуда: Чебоксары




 
  #2 [08.11.09, 01:04] Re: Урок - Оптимизация кода эльфа   

 
эмм... а где оптимизация?

а для поиска книги по имени гораздо лучше использовать FindBookEx

Код: 

int cmp_proc(BOOK* book,int* param)
{
  if(!strcmp(book->xbook->name, (char*)param)) return 1;
  return 0;
}

...

  BOOK* bk = FindBookEx(cmp_proc, (int*)"имякниги");


это будет особо заметно, если придётся искать несколько разных книг




promt is better than google translate
Спасибо сказали: vodoo999, SiLoN, toha257, ELECTRO-NIC



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

Главная Новости Статьи Файлы Патчи Форум Опросы PDA
- Генерация страницы: 0.16 секунд | 11 Запросов | HTML: 38.72 КБ -