Nel tuo caso, basterebbe capire se esiste in questo SDK una qualche procedura che permetta di dire al sistema quali sono le procedure di evento da chiamare: basta scriverle (rispettandone le interfacce), e poi passare alla procedura un puntatore a funzione che a queste si riferisca.
Che ne so, una cosa del tipo
codice:
//procedura evento
void PadHeldUp()
{
}
//funzione di libreria
RegisterPadHelpUpEvent(PadHeldUp);
Altrimenti, sei costretto a lavorare a basso livello... di certo non è il massimo della comodità, ma almeno puoi creare una libreria di controllo del joystick (o chi per lui) facilmente riutilizzabile, e soprattutto... a eventi!
Per quanto riguarda il thread, non so se le librerie per Nintendo DS permettano di crearli, ma il principio resta sempre quello: devi creare un ciclo che controlli di continuo se il tasto del pad è stato premuto o meno, e generi i relativi eventi.
Molto (ma molto!) approssimativamente, potresti fare così:
codice:
//dichiarazione tipo puntatore
void (*pEvento)();
void main()
{
//variabile contenente il puntatore alla procedura di evento
pEvento proc = ProceduraEvento;
//ciclo
while(1)
{
if(pad.Held.Up)
proc(); //che punta a ProceduraEvento
}
}
void ProceduraEvento()
{
printf("EVENTO");
}
In realtà nel tuo caso dovresti creare un oggetto con due metodi: uno che fa partire il loop e un altro del tipo Registra(pEvento p){proc = p;} che accetti dall'esterno il puntatore... ma il principio è più o meno lo stesso.