timespec
構造体は、秒とナノ秒の 2 つの部分で時間を表します。したがって、ミリ秒からの変換のアルゴリズムは非常に単純です。 1 秒は 1000 ミリ秒、1 ミリ秒は 1000 マイクロ秒、1 マイクロ秒は 1000 ナノ秒であり、SI に感謝しています。したがって、最初にミリ秒を 1000 で割って秒数を取得する必要があります。たとえば、1500 ミリ秒 / 1000 =1.5 秒とします。整数演算 (浮動小数点ではない) が与えられると、剰余は削除されます (つまり、1500 / 1000 は 1.5 ではなく 1 に等しくなります)。次に、明らかに 1 秒未満のミリ秒数を表す剰余を取り、それを 100 万倍してナノ秒に変換する必要があります。 1000 で割った余りを求めるには、モジュール演算子 (%
) (つまり 1500 % 1000 is equal to 500
)。たとえば、4321 ミリ秒を秒とナノ秒に変換してみましょう:
上記のことを知っていれば、あとは C コードを少し書くだけです。あなたが正しく理解できなかったことがいくつかあります:
<オール>struct
を付ける必要があります .たとえば、timespec
と言う代わりに あなたは struct timespec
と言います .ただし、C++ では、その必要はありません (残念ながら、私の意見では)。編集:これは矛盾しています (C の関数から `struct` を返す)。
OK、十分な話です。以下は簡単な C コードの例です:
#include <time.h>
#include <stdlib.h>
#include <stdio.h>
static void ms2ts(struct timespec *ts, unsigned long ms)
{
ts->tv_sec = ms / 1000;
ts->tv_nsec = (ms % 1000) * 1000000;
}
static void print_ts(unsigned long ms)
{
struct timespec ts;
ms2ts(&ts, ms);
printf("%lu milliseconds is %ld seconds and %ld nanoseconds.\n",
ms, ts.tv_sec, ts.tv_nsec);
}
int main()
{
print_ts(1000);
print_ts(2500);
print_ts(4321);
return EXIT_SUCCESS;
}
それが役に立てば幸い。幸運を祈ります!