一、gettimeofday函數的介紹
在 Linux 下使用 gettimeofday 可以獲取當前精確到微秒級別的時間。該函數在頭文件 <sys/time.h> 中定義,其函數原型如下:
int gettimeofday(struct timeval *tv, struct timezone *tz);
其中參數 tv 代表獲取到的時間,是一個 timeval 結構指針。timezone 結構指針 tz 被廢棄不再使用,可以傳入 NULL。
二、使用gettimeofday獲取當前時間
下面是一個簡單的示例,使用 gettimeofday 函數獲取當前時間,並將時間信息打印出來:
#include <sys/time.h>
#include <stdio.h>
int main()
{
struct timeval tv;
gettimeofday(&tv, NULL);
printf("當前時間為 %ld.%06ld 秒\n", tv.tv_sec, tv.tv_usec);
return 0;
}
在上述代碼中,首先定義了一個 timeval 結構體變量 tv,調用 gettimeofday 函數獲取當前時間,並將獲取到的時間信息打印出來。其中 tv_sec 存儲了秒數,tv_usec 存儲了微秒數。
三、使用定時器實現精確計時
gettimeofday 不僅可以獲取當前時間,還可以使用這個函數實現精確計時功能。下面的示例代碼展示了如何使用定時器進行計時,輸出程序執行的時間。
#include <stdio.h>
#include <sys/time.h>
int main()
{
struct timeval start, end;
gettimeofday(&start, NULL);
// 模擬程序執行
int res = 0;
for (int i = 0; i < 1000000; i++) {
res += i;
}
gettimeofday(&end, NULL);
long sec = end.tv_sec - start.tv_sec;
long usec = end.tv_usec - start.tv_usec;
long elapsed = sec * 1000000 + usec;
printf("程序執行時間為 %ld 微秒\n", elapsed);
return 0;
}
在上述代碼中,首先使用 gettimeofday 獲取程序開始執行時的時間,然後進行一些耗時的操作,最後再使用 gettimeofday 獲取程序結束執行時的時間。通過計算時間差,可以得到程序執行的時間,輸出到控制台。
四、使用gettimeofday實現精準延時
使用 gettimeofday 不僅可以實現計時,還可以實現精準的延時。下面的示例代碼演示了如何使用 gettimeofday 實現精準的 1 秒鐘延時。
#include <stdio.h>
#include <sys/time.h>
void delay(unsigned int msec)
{
struct timeval tv;
tv.tv_sec = msec / 1000;
tv.tv_usec = (msec % 1000) * 1000;
select(0, NULL, NULL, NULL, &tv);
}
int main()
{
printf("延時開始...\n");
delay(1000);
printf("延時結束!\n");
return 0;
}
在上述代碼中,首先定義了一個 delay 函數,傳入需要延時的時間(以毫秒為單位)。然後創建一個 timeval 結構體變量 tv,計算出需要延時的秒數和微秒數,使用 select 函數實現精準的延時。
五、小結
gettimeofday 函數是一個非常實用的函數,在 Linux 編程中經常會用到。通過 gettimeofday 可以獲取當前時間,實現計時和精準延時等功能。在實際編程中,可以根據自己的需求進行靈活運用。
原創文章,作者:OJKCH,如若轉載,請註明出處:https://www.506064.com/zh-hk/n/333441.html