Все для Sony Ericsson, патчи, эльфы, моддинг, прошивка
Логин: Пароль: Запомнить: Привет гость! Зарегистрируйся или авторизируйся для получения доп. возможностей!
Разделы
PDA версия сайта
Новости
Статьи
Файлы
Патчи
Патчи 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
Сообщений: 3279
Репутация: 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.05 секунд | 10 Запросов | HTML: 38.3 КБ -