回覆列表
-
1 # 苦瓜加點糖
-
2 # 溳城丁丁
直接貼上原始碼,以及執行結果吧!
#include <stdio.h>#include <sys/time.h>#include <unistd.h>int main(int argc, char const *argv[]){ /* code */ struct timeval tv; gettimeofday(&tv, NULL); long s_time = tv.tv_sec; # 獲取當前時間 printf("開始時間為:%ld\n",s_time); printf("hello_word!\n"); #輸出語句 sleep(10); # 間隔10秒輸出 printf("end\n"); # 輸出語句 gettimeofday(&tv, NULL); long e_time = tv.tv_sec; #獲取當前時間 printf("結束時間為:%ld\n",e_time); printf("間隔時間為:%ld\n",e_time-s_time); #輸出間隔時間 return 0;} -
3 # 長風凌空
這個延時的功能實現起來不難,C語言裡面實現實現的方式很多,這裡簡單講幾種應用比較普遍的。
1、延時在一般的流程中,上一條指令執行完畢就按順序執行下一條。在這裡就體現為控制檯的兩條輸出語句同時輸出了,這裡自然有個時間上的間隔,但以眼睛來看就是如此。
那麼,依舊是這個原理如何實現間隔10秒再輸出下一條語句?
我們可以在兩條語句之間加入空指令,比如nop;然後粗略得到100次nop指令執行的時間,以此為基礎使用for迴圈或者do while來控制nop執行的次數。這樣就能達到題主的目的。
for(int i=0;i++;i<100)
{nop;}
2、定時器定時器的應用會出現一箇中斷的概念,也可以理解為回撥。當我們設定定時的長短,定義中斷函式後,就可以開啟定時器。
這個計時和你現在main函式中指令執行是獨立的。只是到特定時間,產生一箇中斷,然後提示你時間到了。
我們就可以透過判斷相關的時間標誌位來確定是否到達10秒的延時。
3、RTOS說RTOS只是舉個例子,在widows平臺下也是一樣的道理。
我們需要延時的時候,只需要按照第一種方式呼叫一個延時函式,如delay_ms(x)。
但是實際的執行效果卻有點像第二種方式,CPU繼續執行其它的執行緒。這裡是基於作業系統了,要說清楚又是另一個問題了。
建議題主瞭解一下排程。
可以用sleep函式。這個函式在windows.h標頭檔案中,如果是linux系統,在unistd.h標頭檔案,sleep() 函式的單位為ms, Sleep(10000);語句就可以實現滯留10s