Linux(Ubuntu 14)で時差をミリ秒単位で計算する必要があります。システム時間とは無関係に時間差(ミリ秒)を取得するにはどうすればよいですか?
アプリケーションが実行中に変更される可能性があるため、システム時刻とは独立している必要があります(GPSから受信したデータに応じてシステム時刻が設定されます)。
私はclock関数をチェックしましたが、プログラムで消費されたプロセッサ時間を返してリアルタイムを必要とするため、私たちのために機能しません。
sysinfo(このquestionに記載されています)は、ブートから秒を返します。また、ミリ秒が必要です。
/proc/uptime(このquestionに記載されています)からの読み取りは、私たちのテストでは遅いようです(ミリ秒が必要であると考え、繰り返し呼び出されます)。
私はC++ 11を使うことができますが、std :: chronoはシステム時刻にも関係していると思います。
これを達成する他の方法はありますか?
私たちのパフォーマンステスト、繰り返し呼び出しの100万(は/ proc /稼働時間の比較のために):
はgettimeofday:
(ではない、それはシステム時刻に依存するので、私たちが必要なもの)
#include <sys/time.h>
unsigned int GetMs(){
unsigned int ret = 0;
timeval ts;
gettimeofday(&ts,0);
static long long inici = 0;
if (inici==0){
inici = ts.tv_sec;
}
ts.tv_sec -= inici;
ret = (ts.tv_sec*1000 + (ts.tv_usec/1000));
return ret;
}
クロック:
(有効ではありませんが、アプリケーションによって使用されるダニを返し、ないリアルタイム)
#include <time.h>
unsigned int GetMs(){
unsigned int ret = 0;
clock_t t;
t = clock();
ret = t/1000;
return ret;
}
稼働時間:
#include <fstream>
unsigned int GetMs(){
unsigned int ret = 0;
double uptime_seconds;
if (std::ifstream("/proc/uptime", std::ios::in) >> uptime_seconds) {
ret = (int) (1000 * uptime_seconds);
}
}
結果:
- はgettimeofday:31ミリ秒
- クロック:153ミリ秒
- アップタイム:6005ミリ秒
あなたの答えをありがとう。それは完全に動作し、私の要件を満たすシステムクロックに依存しません。しかし、私のテストによれば、@ zwolの答えはより速いということを受け入れています。私の組み込み機器では、1000000回の呼び出しが繰り返され、std :: chrono :: steady_clockは3523 ms、clock_gettimeはCLOCK_MONOTONICで2184 msでした。 –
@PauGuillamon問題ありません。喜んで助けてください。 – NathanOliver