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!”程式。