timespec
struktur mewakili waktu dalam dua bagian - detik dan nanodetik. Jadi, algoritme untuk konversi dari milidetik sangat sederhana. Satu detik memiliki seribu milidetik, satu milidetik memiliki seribu mikrodetik, dan satu mikrodetik memiliki seribu nanodetik, yang karenanya kami berterima kasih kepada SI. Oleh karena itu, pertama-tama kita perlu membagi milidetik dengan seribu untuk mendapatkan jumlah detik. Misalnya, 1500 milidetik / 1000 =1,5 detik. Diberikan aritmatika bilangan bulat (bukan floating point), sisanya dijatuhkan (yaitu 1500/1000 sama dengan hanya 1, bukan 1,5). Kemudian kita perlu mengambil sisa yang menunjukkan jumlah milidetik yang pasti kurang dari satu detik, dan mengalikannya dengan satu juta untuk mengubahnya menjadi nanodetik. Untuk mendapatkan sisa pembagian dengan 1000, kita menggunakan operator modul (%
) (yaitu 1500 % 1000 is equal to 500
). Misalnya, mari ubah 4321 milidetik menjadi detik dan nanodetik:
- 4321 (milidetik) / 1000 =4 (detik)
- 4321 (milidetik) % 1000 =321 (milidetik)
- 321 (milidetik) * 1000000 =321000000 (nanodetik)
Mengetahui hal di atas, satu-satunya yang tersisa adalah menulis sedikit kode C. Ada beberapa hal yang Anda salah lakukan:
- Dalam C, Anda harus mengawali tipe data struktur dengan
struct
. Misalnya, daripada mengatakantimespec
Anda mengatakanstruct timespec
. Namun, di C++, Anda tidak harus melakukannya (sayangnya, menurut saya). - Anda tidak dapat mengembalikan struktur dari fungsi di C. Oleh karena itu, Anda perlu meneruskan struktur dengan penunjuk ke dalam fungsi yang melakukan sesuatu dengan struktur itu.
Sunting:Ini bertentangan (Kembalikan `struct` dari fungsi di C).
Oke, cukup bicara. Di bawah ini adalah contoh kode C sederhana:
#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;
}
Semoga membantu. Semoga Sukses!