По просьбе трудящихся решил написать статью на тему калбеков(подробно разебрем для чего ,как зачем)!
Давайте посмотрим на функцию SetupCallbacks,что же здесь происходит
int SetupCallbacks(void){
Первую строчку надеюсь не надо объяснять!
int thid = 0;
Ну это тоже не надо
а вот тут творится ,что-то интересное ,а именно создается новый поток не зависимый от main_thread!Первый аргумент название потока(назывыйте как хотите),второй аргумент это какая функция выполняется потоком(кстати функция должна иметь вид int (SceSize args, void *argp) для того чтобы функция работала), третий - приоритет (меньше – приоритетнее),
четвертый – какой будет изначальный размер стека,пятый-доп опции!
функция вернула нам UID потока или ошибку (если меньше нуля) if(thid >= 0)если больше нуля,тогда стартуем поток
{
sceKernelStartThread(thid, 0, 0); }
Возращаем UID функции CallbackThread
return thid;
}
Идем дальше,по поводу аргументов этой функции было сказано выше!
int CallbackThread(SceSize args, void *argp)
{
int cbid; Тут хранится ID колбека.
Создаем колбек(первый аргумент – имя, второй –функция ,которая вызывается как калбек ,аргумент
калбека),возвращаем ID.
cbid = sceKernelCreateCallback("Exit Callback", exit_callback, NULL);
До этого момента система не знает что это калбек закрытия,не понятно зачем это надо не видел чтобы
еще где-то использовали sceKernelCreateCallback! Вообщем по поводу этой функции все понятно – регистрируем калбек как калбек выхода
sceKernelRegisterExitCallback(cbid);
Здесь поток нам больше не нужен.Эта функция обязательна для всех калбеков!
sceKernelSleepThreadCB();
sceKernelSleepThreadCB();
Все возвращаем ноль.
return 0;
}
Так теперь самая легкая функция(должна принимать вот такой вид int(int arg1, int arg2, void *arg))
int exit_callback(int arg1, int arg2, void *common)
Возвращаем ноль.
{
Здесь,если мы нажали на кнопочку хоме и нажали да ,то выходим из игры с помощью этой
функции -> sceKernelExitGame();
Можно по эксперементировать(например убрать эту строку-игра подвиснет на надписи «Пожалуйста подождите…» - рычажок выключение держим секунд 10 для полного выключения)
return 0;
}
Спасибо за внимание!
Комментариев нет:
Отправить комментарий