Tokigt fulhackproblem med events i C++ & SDL?
Hallå!
Jag satt & pillade med knappar & events i 3D med C++ & SDL och stötte på ett någorlunda tokigt problem. Jag använder user events i SDL och plockar upp dom i en eventloop, dock så får jag felmeddelande när jag dubbelklickar fort. Klickar jag sakta så går det bra samt om jag sätter id samt in till fasta värden ist för att fulcasta om void* till int*, och ja jag hanterar det som händer på andra sidan så det är alltid detta som skall komma
Eventloop:
...
else if (event.user.code == UEDOUBLECLICK){ // min egen kod!
int id = *(int*)event.user.data1; //0, oändligheten - id på objekt som existerar
int in = *(int*)event.user.data2; //0, 1 - flagga för uppräkning
...
}
Ett klick på ett objekt ger ifrån sig en event med data1 = 4 och data2 = 1 med code = UEDOUBLECLICK, detta fungerar precis helatiden så länge man inte dubbelklickar, frågan är vad som händer just då, SDL skall inte uppfatta något som dubbelklick för då skulle inte denna event triggas från början. Något annat problem kan vara trådningssäkerhet, det fungerar inte med try/catch, kommer en crashruta med något med minnet på 0x0000000 vilket inte ska kunna ske.
Någon som har några tips på vad jag kan göra för att förhindra detta, iaf upptäcka det innan det krashar?
Det fungerar som sagt om man skriver id = 4 & ni = 1 direkt, men så fort denna event är med och när man dubbelklickar så krashar det
Skapning av event (test):
SDL_Event* e = new SDL_Event();
e->user .code = UEDOUBLECLICK;
e->type = SDL_USEREVENT;
int* sid = new int;
int* inc = new int;
*sid = 4; *inc = 1;
e->user.data1 = (void*) sid;
e->user.data2 = (void*) inc;
...
Denna event skickas iväg till SDL eventstacken:
...
SDL_PushEvent(e);
...
Kanske har jag gjort någon monstertabbe?
Edit I: Konstigt nog så blir data1 & data2 0x000000 när det inkommer två events snabbt, eller dubbelklick, det går inte att köra debuggern & läsa av båda utan får sätta hit count på två, då kan man läsa av att data1 & data2 ej är ifyllda :S Möjligen lär det gå att jämföra dom med null och undvika problemet.
type 24 '' unsigned char
code 100 int
data1 0x00000000 void*
data2 0x00000000 void*
Mvh
Dalton Sleeper