目次 - API(機能別) - タイマ - SDL_AddTimer

SDL_AddTimer

指定のミリ秒が経過した後に別スレッドのコールバック関数を呼ぶように設定する

構文

SDL_TimerID SDL_AddTimer(Uint32 interval, SDL_TimerCallback callback, void* param)

引数

intervalcallbackを呼ぶまでの時間(ミリ秒)
callback指定のintervalが経過した後に呼ばれる関数
paramcallbackに渡されるポインタ

戻り値

成功のときタイマID, 失敗のとき0を戻す. SDL_GetError()を呼んで詳細を知ることができる.

サンプルコード

// 一定時間の経過で呼ばれる関数
Uint32 callback(Uint32 interval, void* name) {
    printf("こんにちは %s!\n", (const char *)name);
    return 0;
}

/* ... */

// タイマを初期化する
SDL_Init(SDL_INIT_VIDEO | SDL_INIT_TIMER);

/* ... */

// タイマを1秒に設定する
SDL_TimerID timerID = SDL_AddTimer(1000, callback, "SDL");

// メインループ
SDL_bool quit;
while(!quit) {
    /* ... */
}

// メインループの後でタイマを取り除く
SDL_RemoveTimer(timerID);

詳細

この関数を使う場合, SDL_Init()にSDL_INIT_TIMERを渡している必要がある.

コールバック関数には, 第1引数に現在のタイマ間隔が, 第2引数にユーザがSDL_AddTimer()で設定したパラメータが渡される. コールバック関数は次のタイマ間隔を戻す必要がある. 0を戻すとタイマはキャンセルされる.

コールバック関数は別スレッドで実行される. メインスレッドでタイマコールバックを処理する方法が必要ならばサンプルコードを参照すること.

タイマはコールバックを実行するのにかかった時間を考慮している. 例えば, コールバックの実行に250ミリ秒かかり, 1000(ミリ秒)を戻すと, タイマは次の呼び出しまで750ミリ秒しか待たない.

間隔はOSスケジューリングで不正確になりうる. コールバック内で不正確さを補正する必要がある場合, SDL_GetTicks()またはSDL_GetPerformanceCounter()を使って現在の時刻に注目する必要がある.

バージョン

SDL 2.0.0以降

関連項目(関数)

SDL_RemoveTimer

SDL Wikiへのリンク

SDL_AddTimer - SDL Wiki