|
Verfasser |
Nachricht |
Fly Destination
Durchstarter
Beiträge: 99
Gruppe: User
Registriert seit: Jul 2010
Status:
Offline
Danke erhalten: 47
|
Eine Frage zu sceKernelExitGame()
Hallo, ich hätte mal eine kurze Frage. Wenn ich folgenden Code kompiliere und ausführe, klappt es perfekt. Wenn man die X-Taste drückt, beendet sich das Homebrew und kehrt zurück ins XMB:
int main()
{
pspDebugScreenInit();
SetupCallbacks();
printf("Hello World by Fly Destination\n");
SceCtrlData pad;
while(1)
{
sceCtrlReadBufferPositive(&pad, 1);
if (pad.Buttons & PSP_CTRL_CROSS) {
pspDebugScreenClear();
printf("Exiting\n");
printf("Please Wait...");
sceKernelExitGame();
}
}
sceKernelSleepThread();
return 0;
}
Aber wieso klappt es nur, wenn man das while(1) davor setzt? Wenn man den Code so schreiben würde, würde das Homebrew zwar starten, aber wenn man X drückt, würde es sich nicht beenden:
int main()
{
pspDebugScreenInit();
SetupCallbacks();
printf("Hello World by Fly Destination\n");
SceCtrlData pad;
sceCtrlReadBufferPositive(&pad, 1);
if (pad.Buttons & PSP_CTRL_CROSS) {
pspDebugScreenClear();
printf("Exiting\n");
printf("Please Wait...");
sceKernelExitGame();
}
sceKernelSleepThread();
return 0;
}
Wieso? Ergibt doch Sinn? Falls die X-Taste gedrückt ist, beende das Spiel...
Aber wieso geht es nicht, wieso muss man das in eine while Schleife packen?
Fly Destination
|
|
19.01.2011 16:45 |
|
|
|
Ceikor
Ex-Developer
Beiträge: 581
Gruppe: User
Registriert seit: Dec 2008
Status:
Abwesend
Danke erhalten: 701
|
RE: Eine Frage zu sceKernelExitGame()
Aus dem ganz einfachen grund, es ist nicht LUA was standartmässig in einer schleife läuft.
C arbeitet von oben bis unten durch.
Wird x nicht beim abarbeiten gedrückt ist die bedingung "nicht wahr" und wird überstrungen, würdest du C verstehen hättest du es dir selbst beantworten können
Dieser Beitrag wurde zuletzt bearbeitet: 19.01.2011 17:02 von Ceikor.
|
|
19.01.2011 16:56 |
|
Folgende User bedanken sich: |
|
_Kai_
be linux
Beiträge: 2.680
Gruppe: Programmierung
Registriert seit: Nov 2009
Status:
Abwesend
Danke erhalten: 2809
|
RE: Eine Frage zu sceKernelExitGame()
Wenn du die X Taste schon beim Starten der EBOOT gedrückt hältst funktioniert es bestimmt. Er liest den Tastenbuffer halt nur ein mal ganz kurz aus und springt dann zu sceKernelSleepThread().
Eine While Schleife dagegen würde sich immer wiederholen bis du sie durch break oder sonstwas beendest.
PSVita mit 16gb Memorystick und PlayStation+
+ Uncharted + Army Corps of Hell + Assassins Creed
+ NFS Most Wanted + COD Black Ops + Resistance
+ Everybodys Golf + Modnation Racers
Für PSN ID => PN
|
|
19.01.2011 17:16 |
|
Folgende User bedanken sich: |
|
~ferra~
Experte
Beiträge: 583
Gruppe: User
Registriert seit: Apr 2010
Status:
Offline
Danke erhalten: 461
|
RE: Eine Frage zu sceKernelExitGame()
Der gesammte Code innerhalb der Main-Funktion wird einmal durchlaufen.
Daher funktioniert dein Code oben, weil da eine Schleife vorhanden ist. Daher überprüft die PSP permanent ob die Taste gedrückt ist oder nicht.
Unten fehlt die Schleife. Daher wird dein gesamter Code innerhalb von Bruchteilen durchgearbeitet und auch nur einmal (!). Innerhalb dieser Zeit wirst du die Taste nicht gedrückt bekommen.
MfG ferra
|
|
19.01.2011 17:35 |
|
Folgende User bedanken sich: |
|
Ceikor
Ex-Developer
Beiträge: 581
Gruppe: User
Registriert seit: Dec 2008
Status:
Abwesend
Danke erhalten: 701
|
RE: Eine Frage zu sceKernelExitGame()
Mal ehrlich warum schreiben hier noch 2 weiter laute rein? Er sollte ertsmal C/C++ lernen und verstehen ansonsten wird das sowieso nichts. Das ist eigentlich das erste was man lernt bei C und wenn das noch nichtmal vorhanden ist wird alles weitere absolut nichts und wenn dann nur C/P und hoffen das es geht.
Sry Fly Destination aber lerne wirklich erstmal C/C++ und dann fang mit der PSP an.
|
|
19.01.2011 17:56 |
|
|
|
Fly Destination
Durchstarter
Beiträge: 99
Gruppe: User
Registriert seit: Jul 2010
Status:
Offline
Danke erhalten: 47
|
RE: Eine Frage zu sceKernelExitGame()
Ich kann C
Und ich weiß auch wofür eine while Schleife gut ist, nur war mir unklar wieso denn das mit den Tastenfunktionen in die while-Schleife muss. Ich meine, dass printf ist ja auch nicht in der while schleife und wird trotzdem die ganze Zeit angezeigt. Laut euch müsste es der Text in printf() nur kurz angezeigt werden, und dann sofort wieder verschwinden. Aber danke für die guten Erklärungen
Fly Destination
|
|
19.01.2011 19:31 |
|
|
|
HacKmaN
Ex-Developer
Beiträge: 2.423
Gruppe: User
Registriert seit: Oct 2009
Status:
Offline
Danke erhalten: 3319
|
RE: Eine Frage zu sceKernelExitGame()
Ich kann C
Und ich weiß auch wofür eine while Schleife gut ist, nur war mir unklar wieso denn das mit den Tastenfunktionen in die while-Schleife muss. Ich meine, dass printf ist ja auch nicht in der while schleife und wird trotzdem die ganze Zeit angezeigt. Laut euch müsste es der Text in printf() nur kurz angezeigt werden, und dann sofort wieder verschwinden. Aber danke für die guten Erklärungen
Fly Destination
Dank dem sceKernelSleepThread wird dein main Thread einfach gestoppt... dass heißt Bildschirmausgabe bleibt gleich, andere Threads (bsp.: der Exit-Thread) laufen weiter, aber von deiner main wird kein Code mehr ausgeführt.
|
|
19.01.2011 19:56 |
|
Folgende User bedanken sich: |
|