web-dev-qa-db-ja.com

LinuxのGetTickCount()と同等

Linuxで GetTickCount() に相当するものを探しています。

現在私はPythonの time.time() を使用していますが、これはおそらく gettimeofday() 。私が心配しているのは、返された時刻(UNIXエポック)が、NTPなどによってクロックが乱された場合、不規則に変わる可能性があることです。一定の割合で増加するだけの単純なプロセスまたはシステムウォールタイムで十分です。

CまたはPythonでそのような時間関数は存在しますか?

29
Matt Joiner

CLOCK_MONOTONIC を使用できます。 C:

struct timespec ts;
if(clock_gettime(CLOCK_MONOTONIC,&ts) != 0) {
 //error
}

Python way- Pythonで単調な持続時間を取得するにはどうすればよいですか)については、この質問を参照してください

27
nos

これはうまくいくようです:

#include <unistd.h>
#include <time.h>

uint32_t getTick() {
    struct timespec ts;
    unsigned theTick = 0U;
    clock_gettime( CLOCK_REALTIME, &ts );
    theTick  = ts.tv_nsec / 1000000;
    theTick += ts.tv_sec * 1000;
    return theTick;
}

はい、get_tick()は私のアプリケーションのバックボーンです。各「タスク」ごとに1つの状態マシンで構成されます。たとえば、スレッドを使用せずにマルチタスクを実行でき、プロセス間通信非ブロッキング遅延を実装できます。

6

clock_gettime(CLOCK_MONOTONIC, &tp);を使用してください。この呼び出しは、WindowsのGetTickCount()のようにシステム時刻の調整の影響を受けません。

5
macgarden

はい、カーネルには高解像度のタイマーがありますが、それは異なります。これを移植可能な方法でラップする奇妙なプロジェクトのソースを確認することをお勧めします。

C/C++から私は通常_#ifdef_これをLinuxでgettimeofday()を使用してマイクロ秒単位の解像度にしています。エポックもダブルを受け取るので、私はよくこれを秒の端数として追加します。

1