2011-07-28 36 views
1

私はsetitimerと短いタイムアウトを設定し、その後のLinux 2.6.26システム(Debianの5.0.5)上(getitimerまたは別のsetitimerで)設定値を照会するとき、私は戻って、私は設定よりも高い値を取得する:Linuxでsetitimerを切り上げる?

#include <sys/time.h> 
#include <iostream> 

int main() { 
    struct itimerval wanted, got; 

    wanted.it_value.tv_sec  = 0; 
    wanted.it_value.tv_usec = 7000; 
    wanted.it_interval.tv_sec = 0; 
    wanted.it_interval.tv_usec = 0; 

    setitimer(ITIMER_VIRTUAL, &wanted, NULL); 
    getitimer(ITIMER_VIRTUAL, &got); 

    std::cerr << "we said: " << wanted.it_value.tv_usec << "\n" 
      << "linux set: " << got.it_value.tv_usec << std::endl; 

    return 0; 
} 

リターン:

we said: 7000 
linux set: 12000 

我々はいくつかの計算の後に残っていると報告回数を使用するのでこれは、問題がある、と彼らはあまりにも、あまりにも大きいです。

これは既知の問題ですか? (グーグルがうまくいきませんでした)誰かが良い回避策を持っていますか?

答えて

1

POSIX documentation of the setitimer function

実装はタイマー値の精度に制限を置くことがありますがあります。各インターバルタイマーについて、要求されたタイマー値が実装がサポートするものより細かい粒度を必要とする場合、実際のタイマー値はサポートされている次の値に切り上げられます。

システムの細かさは1000usec (6000usecと思われます)、タイマー値は切り上げられます。このような精度が必要な場合は、タイマー粒度が問題になります。

関連する問題