Linux за българи: Форуми

Програмиране => Общ форум => Темата е започната от: dilyan_rusev в Apr 06, 2007, 14:41



Титла: проблемация с timer-ите в sdl
Публикувано от: dilyan_rusev в Apr 06, 2007, 14:41
Ами няма какво толкова да се говори. Кодът е достатъчно красноречив, както и изходът на програмата:
Примерен код
Uint32 testCallback(Uint32 interval, void *param);
....
SDL_TimerID id = SDL_AddTimer(1000, testCallback, NULL);
   
SDL_Event e;
bool done = false;
while (!done) {
   while(SDL_PollEvent(&e)) {
       switch (e.type) {
             case SDL_KEYDOWN:
                    if (e.key.keysym.sym == SDLK_ESCAPE)
                          done = true;
                    break;
       }
   }
}
   
SDL_RemoveTimer(id);
...
Uint32 testCallback(Uint32 interval, void *param) {
     static int counter = 0;
     printf("Test timer callback\nInterval:\t%d\nTimes called:\t%i\n",
                interval, counter);
    counter++;
}


И сега идва голямата ебавка... изходът от програмата: htp://store3.data.bg/bloodrager/gluposti/blaaa

Това, което ме убива, е, че започва с 1000 и после какво и защо - не мога да разбера. Уж давам SDL_INIT_TIMER... не мога да разбера защо се получава така...


редакция:
ааа яко съм тъп........
та начи за тези, които също като мене биха забравили:
всеки callback трябва да връща новия интервал (или по-точно този, който иска). демек за да работи както трябва (да се извиква на всяка секунда) трябва да стане следното:
Примерен код
Uint32 testCallback(Uint32 interval, void *param) {
     static int counter = 0;
     printf("Test timer callback\nInterval:\t%d\nTimes called:\t%i\n",
                interval, counter);
    counter++;
    /* !!!!!!!!!!!!!!!!!!!!!!!!! */
    return interval;
    /* !!!!!!!!!!!!!!!!!!!!!!!!! */
}