【SDL】SDL学习笔记二 定时器
生活随笔
收集整理的這篇文章主要介紹了
【SDL】SDL学习笔记二 定时器
小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
定時器相關API(SDL_timer.h):
? 1. Uint32 SDL_GetTicks(): 獲取從SDL庫初始化(定時器模塊初始化)開始到當前的運行時間(ms);
? 2. Uint64 SDL_GetPerformanceCounter(): 獲取高精度定時器的當前值;
? 3. Uint64 SDL_GetPerformanceFrequency(): 獲取高進度定時器頻率(每秒鐘高精度定時器的次數);
? 4. void SDL_Delay(Uint32 ms): 延遲函數;
? 5. SDL_TimerID SDL_AddTimer(Uint32 interval, SDL_TimerCallback callback, void *param):
向系統請求增加一個定時器.
SDL_TimerID: 定時器的ID,若該值為NULL,表示請求失敗;
interval: ?定時間隔;
callback:? 回調函數,定時時間到后會調用此函數;
備注: typedef Uint32 (* SDL_TimerCallback)(Uint32 interval, void *param):
該函數返回值為下次喚醒的時長,若返回0,則不會再喚醒.
運行結果如下:
程序運行結果如下:
? 1. Uint32 SDL_GetTicks(): 獲取從SDL庫初始化(定時器模塊初始化)開始到當前的運行時間(ms);
? 2. Uint64 SDL_GetPerformanceCounter(): 獲取高精度定時器的當前值;
? 3. Uint64 SDL_GetPerformanceFrequency(): 獲取高進度定時器頻率(每秒鐘高精度定時器的次數);
? 4. void SDL_Delay(Uint32 ms): 延遲函數;
? 5. SDL_TimerID SDL_AddTimer(Uint32 interval, SDL_TimerCallback callback, void *param):
向系統請求增加一個定時器.
SDL_TimerID: 定時器的ID,若該值為NULL,表示請求失敗;
interval: ?定時間隔;
callback:? 回調函數,定時時間到后會調用此函數;
備注: typedef Uint32 (* SDL_TimerCallback)(Uint32 interval, void *param):
該函數返回值為下次喚醒的時長,若返回0,則不會再喚醒.
? 6. SDL_bool SDL_RemoveTimer(SDL_TimerID id): 刪除給定id的定時器,返回值表示是否刪除成功.
? 7.int?SDL_SetTimer(Uint32 interval, SDL_TimerCallback callback);此函數也是啟動定時器和刪除定時器的版本,但是已經被上面兩個API替代。
參考程序示例一:
#include <stdio.h> #include <SDL/SDL.h>int i = 0;//回調函數 Uint32 my_fun(Uint32 interval, void *param) {printf("interval: %d *param: %d\n", interval, *(int*)param);i++;return interval; }int main(void) {int ret;Uint32 time;//定時器IDSDL_TimerID timeId = NULL;//SDL初始化ret = SDL_Init(SDL_INIT_VIDEO | SDL_INIT_TIMER);if (-1 == ret){printf("SDL_Init failed..\n"); goto err0;}//延時函數 單位是毫秒//SDL_Delay(1000);//返回從SDL初始化開始到現在的時間 單位是毫秒time = SDL_GetTicks();printf("%u\n", time);//添加定時器timeId = SDL_AddTimer(100, my_fun, &time);if (NULL == timeId){printf("AddTime failed...\n"); goto err0;}while(1){if (10 == i)break;}//刪除定時器SDL_RemoveTimer(timeId);//關閉SDLSDL_Quit();return 0; err0:return -1; }
運行結果如下:
原來版本定時器示例二:
#include <stdio.h> #include <SDL/SDL.h>int i = 0;//定時器的第二種方法 此API已經被SDL_AddTimer SDL_RemoveTimer取代 Uint32 fun(Uint32 interval) {printf("interval: %d\n", interval);i++; return interval; }int main(void) {int ret;Uint32 time;//定時器IDSDL_TimerID timeId = NULL;//SDL初始化ret = SDL_Init(SDL_INIT_VIDEO | SDL_INIT_TIMER);if (-1 == ret){printf("SDL_Init failed..\n"); goto err0;}//延時函數 單位是毫秒//SDL_Delay(1000);//返回從SDL初始化開始到現在的時間 單位是毫秒time = SDL_GetTicks();printf("%u\n", time);SDL_SetTimer(100, fun);while(1){if (10 == i)break;}//刪除定時器SDL_SetTimer(0, NULL);//關閉SDLSDL_Quit();return 0; err0:return -1; }
程序運行結果如下:
總結
以上是生活随笔為你收集整理的【SDL】SDL学习笔记二 定时器的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 【Linux网络编程】并发服务器的三种实
- 下一篇: 【Linux网络编程】原始套接字能干什么