SDL Timer und Beenden erzeugt Fehlermeldung



  • hallo da draussen, ich habe mit SDL die ersten Schritte hinter mich gebracht auf dem weg zum ersten game. Nun habe ich folgendes Problem, seit dem Zeitpunkt wo ich SDL_Timer verwende, erscheint bei mir die fehlermeldung "zugriffsverletzung in sdl.dll". das passiert genau dann wenn exit() aufgerufen wird. Kennt jemand die Lösung, oder hat ne Vermutung?



  • Zeig mal bissel Quellcode wie du den timer initialisierst und benutzt.
    Du kannst auch die Timer Bsp von hier http://lazyfoo.net/SDL_tutorials/index.php ausprobieren und schauen ob diese funktionieren.

    schirrmie



  • also, die initlialisierung passiert so:

    void init
    {
    ...
    SDL_Init(SDL_INIT_TIMER);
    run()
    }

    void run ()
    {
    speccurstimer = SDL_AddTimer(10, cursor, NULL);
    }

    Uint32 cursor(Uint32 interval, void *param)
    {
    int posx, posy;
    SDL_Event event;

    while(SDL_PollEvent(&event))
    {
    SDL_GetMouseState(&posx, &posy);
    //SDL_WM_GrabInput(SDL_GRAB_ON);
    switch(event.type)
    { //Maus und Tastaturabfrage

    case SDL_KEYDOWN:
    switch(event.key.keysym.sym)
    {
    case SDLK_ESCAPE: beenden(); //hier wird beendet
    }
    break;
    case SDL_MOUSEBUTTONDOWN:
    if (event.motion.state & SDL_BUTTON(SDL_BUTTON_LEFT))
    {
    SDL_RemoveTimer(curstimer);
    movescreen(posx, posy);
    }
    }
    }
    return (interval);
    }

    void beenden ()
    {
    SDL_RemoveTimer(speccurstimer);
    SDL_RemoveTimer(curstimer);
    SDL_Quit();
    exit(0);
    }

    hoffentlich steigst du durch^^
    ich schau mir nebenbei mal deinen link an
    und danke für die hilfe



  • also, die initlialisierung passiert so:

    void init
    {
    ...
    SDL_Init(SDL_INIT_TIMER);
    run()
    }

    void run ()
    {
    speccurstimer = SDL_AddTimer(10, cursor, NULL);
    }

    Uint32 cursor(Uint32 interval, void *param)
    {
    int posx, posy;
    SDL_Event event;

    while(SDL_PollEvent(&event))
    {
    SDL_GetMouseState(&posx, &posy);
    //SDL_WM_GrabInput(SDL_GRAB_ON);
    switch(event.type)
    { //Maus und Tastaturabfrage

    case SDL_KEYDOWN:
    switch(event.key.keysym.sym)
    {
    case SDLK_ESCAPE: beenden(); //hier wird beendet
    }
    break;
    case SDL_MOUSEBUTTONDOWN:
    if (event.motion.state & SDL_BUTTON(SDL_BUTTON_LEFT))
    {
    SDL_RemoveTimer(curstimer);
    movescreen(posx, posy);
    }
    }
    }
    return (interval);
    }

    void beenden ()
    {
    SDL_RemoveTimer(speccurstimer);
    SDL_RemoveTimer(curstimer);
    SDL_Quit();
    exit(0);
    }

    hoffentlich steigst du durch^^
    ich schau mir nebenbei mal deinen link an
    und danke für die hilfe



  • Pack den Code bitte mal in Code-Tags. Sonst kann/will sich das ja keiner durchlesen...


Anmelden zum Antworten