跳转到内容

PSP 编程/通用/通用回调

来自维基教科书,自由的教科书

通用回调

[编辑 | 编辑源代码]

在开始为 PSP 编程之前,我们将从在我们的编程目录中创建一个名为“common”的文件夹开始。 这个文件夹将包含几个文件,这些文件经常会在我们的程序中使用。 我们将把这些文件放在这里,这样我们就不必不断地重复编写相同的代码。

callback.h

[编辑 | 编辑源代码]

现在让我们创建一个名为“callback.h”的新文件。 此头文件将声明一些我们需要的东西,以便使我们的程序能够在 PSP 上运行。

#ifndef COMMON_CALLBACK_H
#define COMMON_CALLBACK_H

int isRunning();
int setupExitCallback();

#endif

“ifndef”用于确保此文件只被导入一次,否则会发生错误。 然后它应该很清楚; 我们将有两个函数,我们将使用它们:“isRunning()”用于检查用户是否请求退出程序,以及“setupCallbacks()”用于设置程序在 PSP 上运行所需的所有内容。

callback.c

[编辑 | 编辑源代码]

现在我们有了头文件定义,我们也可以创建源文件:将其命名为“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!”程序

华夏公益教科书