void SDL_AddEventWatch(SDL_EventFilter filter, void* userdata)
filter | イベント発生時に呼ばれる関数 (詳細を参照すること) |
userdata | filterへ渡されるポインタ |
int MyEventFunction(void *userdata, SDL_Event *event) {
// userdataとeventを使って処理を行う
return 0; // 戻り値は無視される
}
// ...
SDL_AddEventWatch(MyEventFunction, NULL);
filterの関数プロトタイプは
int YourEventFilter(void* userdata, SDL_Event* event)
YourEventFilterは任意の関数名で, パラメータは次の通りである.
userdata | SDL_AddEventWatch()で設定したuserdata |
event | コールバックを引き起こしたイベント |
filterはイベントが発生したとき呼ばれ, その戻り値は無視される.
注意: 別スレッドで動作する場合, イベントフィルタ関数で行うことには細心の注意を払うこと!
シグナル(例えばSIGINT)で終了イベントが発生した場合, まず内部キューを迂回してイベント監視コールバックに届けられ, そして次にイベントポーリングに届く.
メモ: コールバックはユーザのSDL_PushEvent()で発生させたイベントでも呼ばれる. しかし, 無効なイベントや, SDL_SetEventFilter()でコールバックフィルタを設定したイベントや, SDL_PeepEvents()でユーザが発生されたイベントの場合は呼ばれない.