comunque vi spiego a cosa serve così magari potete darmi suggerimenti.
Praticamente c'è una classe che si chiama class window con questa si possono creare finestre che si servono delle SDL .
Quando si avvia il costruttore, oltre alla creazione della finestra, si attiva un thread, che deve accedere ad una struttura di eventi (mouse tastiera, etc) privata alla classe così definita: SDL_Event message;
Per questo mi serve che un metodo interno alla classe sia usato come thread.
Questo è il codice dell'ultimo tentativo fatto ieri, fallito.
Codice PHP:
int ThreadCallingLoopProcedure (void * data)
{
//crea un mutex per evitare conflitti con letture di SDL_Event message; da parte del thread e di altre funzioni
LoopProcedureMutex = SDL_CreateMutex();
SDL_LockMutex(LoopProcedureMutex);
//informazioni per il debug
cout << "Starting ThreadCallingLoopProcedure pointing to " << data << endl;
//viene passato come argomento A SDL_CreateThread(ThreadCallingLoopProcedure ,this)
fe::window * object = (fe::window *)data;
//questa funzione, setta una procedura predefinita che processa alcuni semplici messaggi
object->SetMainLoop(PredefiniteLoopProcedure);
SDL_UnlockMutex(LoopProcedureMutex);
int ReturnValue = 1;
do
{
//verifica eventi e se ce ne sono chiama CallLoopProcedure, che è un metodo della classe che invia alla procedura l'evento da proccessare
if( SDL_PollEvent(object->ReadMessage()) ) //<- qui mi da errore di run time perché ritorna un puntatore a membro privato e non ci sono i permessi necessari
ReturnValue = object->CallLoopProcedure();
else //equivalente a Sleep(5);
SDL_Delay(5);
}//read message semplicemente ritorna un puntatore alla struttura eventi, e se messaggio->type == SDL_QUIT, chiude la procedura
while(object->ReadMessage()->type != SDL_QUIT || ReturnValue == 0);
//chiama esplicitamente il distruttore
object->close();
//informazioni per il debug
SDL_LockMutex(LoopProcedureMutex);
cout << "Ending ThreadCallingLoopProcedure pointing to " << data << endl;
SDL_UnlockMutex(LoopProcedureMutex);
//fine
return 0;
}
CHe ne pensate???