非常に便利で単純なため移植性はありませんが、Windows と Linux は異なるスレッド ライブラリを使用するため、次のように記述する必要があります。
#if defined WIN32
// Timer for Windows: it uses SetTimer
#endif
#if defined __LINUX__
// Timer for Linux: it uses settimer
#endif
コードはここに書くほど短くはないので、Windows タイマーについてはこちらを参照してください。Windows では、 の代わりにSetTimer()
、より単純な を使用することを検討できますPostMessageDelayed()
。使用するリソースはさらに少なくなります。
Linux の場合、次のように記述できます。
void test_timer()
{
signal(SIGALRM, alarm_handler);
alarm(60); // 1 minute, granularity is 1 second
}
void alarm_handler(int signo)
{
if (signo == SIGALRM)
{
// Time elapsed
}
}
さらに
、ポータブル ライブラリを作成する必要がある場合、Windows バージョンで SetTimer() を使用するという考えはかなり見苦しいかもしれません。Windows の場合は、バックグラウンド スレッドを作成してから、必要な時間だけスリープ状態にすることを検討できます (そのため、Windows メッセージなしですべてを実行できます) 。