0

X ミリ秒のタイマーを設定し、有効期限が切れたときに関数を呼び出せるようにする必要があります。

Boost\asio を使用していくつかのソリューションを見てきましたが、Boost を使用できません。

理想的には、ソリューションが Windows と Linux で動作することを望みます。それは難しい注文です、私は知っています!

私がこれについてどうするか知っている人はいますか?

編集:プログラムは対話型であるため、スレッドをスリープ状態にすることはできません。そして、私はむしろ回転を使用するソリューションを使用したくありません。while(enough time hasn't elapsed) { }

4

2 に答える 2

1

非常に便利で単純なため移植性はありませんが、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 メッセージなしですべてを実行できます)

于 2012-03-18T19:41:38.347 に答える
0

setittimerを使用できるはずです。

于 2012-03-18T19:34:13.203 に答える