PSP 编程/通用/通用回调
外观
< PSP 编程
在开始为 PSP 编程之前,我们将从在我们的编程目录中创建一个名为“common”的文件夹开始。 这个文件夹将包含几个文件,这些文件经常会在我们的程序中使用。 我们将把这些文件放在这里,这样我们就不必不断地重复编写相同的代码。
现在让我们创建一个名为“callback.h”的新文件。 此头文件将声明一些我们需要的东西,以便使我们的程序能够在 PSP 上运行。
#ifndef COMMON_CALLBACK_H
#define COMMON_CALLBACK_H
int isRunning();
int setupExitCallback();
#endif
“ifndef”用于确保此文件只被导入一次,否则会发生错误。 然后它应该很清楚; 我们将有两个函数,我们将使用它们:“isRunning()”用于检查用户是否请求退出程序,以及“setupCallbacks()”用于设置程序在 PSP 上运行所需的所有内容。
现在我们有了头文件定义,我们也可以创建源文件:将其命名为“callback.c”。 我们将从包含文件“pspkernel.h”开始,它使我们能够访问几个内核方法。
#include <pspkernel.h>
接下来我们创建一个布尔值。 执行方法“isRunning()”将告诉我们用户是否创建了退出应用程序的请求。 我们将在我们的程序中使用此函数,以便我们能够清理任何剩余的内存并正常退出。
static int exitRequest = 0;
int isRunning()
{
return !exitRequest;
}
现在这是困难的部分... 好消息是,你不需要完全理解它! 基本上,它所做的是创建一个新线程,该线程将创建一个退出回调。 回调将在用户按下 PSP 上的“home”和“exit”按钮时使“exitRequest”等于真。 自己看看
#include <pspkernel.h>
static int exitRequest = 0;
int isRunning()
{
return !exitRequest;
}
int exitCallback(int arg1, int arg2, void *common)
{
exitRequest = 1;
return 0;
}
int callbackThread(SceSize args, void *argp)
{
int callbackID;
callbackID = sceKernelCreateCallback("Exit Callback", exitCallback, NULL);
sceKernelRegisterExitCallback(callbackID);
sceKernelSleepThreadCB();
return 0;
}
int setupExitCallback()
{
int threadID = 0;
threadID = sceKernelCreateThread("Callback Update Thread", callbackThread, 0x11, 0xFA0, THREAD_ATTR_USER, 0);
if(threadID >= 0)
{
sceKernelStartThread(threadID, 0, 0);
}
return threadID;
}
如果你不完全理解它,别担心,这就是我们为此创建单独文件的原因。 它不会改变,所以我们所要做的就是包含它。
现在您可以进入下一节,该节将向您展示如何创建一个简单的“Hello World!”程序。