導航:首頁 > 編程系統 > linux獲取微秒

linux獲取微秒

發布時間:2024-04-25 06:46:52

1. linux usleep()與usleep_range()的區別是什麼

  1. usleep函數能把進程掛起一段時間, 單位是微秒(千分之一毫秒)。

    文件: unistd.h

    語法:void usleep(int micro_seconds);

    返回回值: 無

    內容說明:本答函數可暫時使程序停止執行。參數 micro_seconds 為要暫停的微秒數(us)。

2.這個延遲函數最少的延遲時間為50us, 就算min=max=1, 實際的效果應該不是延遲1us, 而是50us,看參數就能看出來這個函數是在一定范圍內延遲,而不是准確的延遲。

usleep_range(unsigned long min, unsigned long max)

2. linux下,記錄響應時間的腳本,精確到毫秒ms

執行前、執行後獲取兩次時間戳相減吧。
不過 Linux 貌似伺服器版、普通桌面版的時鍾精確度不是很高。

3. 如何用C語言得到精確到微秒

timeval這個struct當中可以精確到微秒。

LINUX中示例:

#include<stdio.h>//forprintf()
#include<sys/time.h>//forgettimeofday()
#include<unistd.h>//forsleep()

intmain()
{
structtimevalstart,end;
gettimeofday(&start,NULL);
printf("start:%d.%d ",start.tv_sec,start.tv_usec);
sleep(1);
gettimeofday(&end,NULL);
printf("end:%d.%d ",end.tv_sec,end.tv_usec);

return0;
}
運行回結果答:
start:1418118324.633128
end:1418118325.634616

4. 在linux下,想用sleep函數實現延時五秒,應該怎麼設參數

使用許可權 : 所有使用者
使用方式 : sleep [--help] [--version] number[smhd]
說明 : sleep 可以用來將目前動作延遲一段時間
參數說明 :
--help : 顯示輔助訊息
--version : 顯示版本編號
number : 時間長度,後面可接 s、m、h 或 d
其中 s 為秒,m 為 分鍾,h 為小時,d 為日數
例子 :
顯示目前時間後延遲 1 分鍾,之後再次顯示時間 :
date;sleep 1m;date

這個命令更多應用於shell腳本編程里和程序里

如下面的一段程序:

應用程序:

復制代碼
代碼如下:

#include <syswait.h>
usleep(n) //n微秒
Sleep(n)//n毫秒
sleep(n)//n秒
驅動程序:
#include <linux/delay.h>
mdelay(n) //milliseconds 其實現
#ifdef notdef
#define mdelay(n) (\
{unsigned long msec=(n); while (msec--) udelay(1000);})
#else
#define mdelay(n) (\
(__builtin_constant_p(n) && (n)<=MAX_UDELAY_MS) ? udelay((n)*1000) : \
({unsigned long msec=(n); while (msec--) udelay(1000);}))
#endif
調用asm/delay.h的udelay,udelay應該是納秒級的延時
Dos:
sleep(1); //停留1秒
delay(100); //停留100毫秒
Windows:
Sleep(100); //停留100毫秒
Linux:
sleep(1); //停留1秒
usleep(1000); //停留1毫秒

每一個平台不太一樣,最好自己定義一套跨平台的宏進行控制

秒還是微秒?關於延時函數sleep()
因為要寫一段代碼,需要用到sleep()函數,在我印象中,sleep(10)好像是休眠10微秒,結果卻是休眠了10秒(在Linux下)。覺得很奇怪,因為頭兒也記得好像是微秒為單位的。所以就查了一下。

原來linux下的sleep函數原型為:
unsigned int sleep(unsigned int seconds);
而MFC中的Sleep函數原型為:
void Sleep(DWORD dwMilliseconds);
也就是說,Linux下(使用的gcc的庫),sleep()函數是以秒為單位的,sleep(1);就是休眠1秒。而MFC下的sleep()函數是以微秒為單位的,sleep(1000);才是休眠1秒。原來如此啊。而如果在Linux下也用微妙為單位休眠,可以使用線程休眠函數:void usleep(unsigned long usec);當然,使用的時候別忘記#include <system.h>哦。

另外值得一提的是,linux下還有個delay()函數,原型為extern void delay(unsigned int msec);它可以延時msec*4毫秒,也就是如果想延時一秒鍾的話,可以這么用 delay(250);

5. Linux下C語言獲得系統時間的方法

沒有完整程序, 不過能提供一點資料

int gettimeofday(struct timeval * tv,struct timezone *tz);
這個函數可以獲取當前時間, 貌似只要第一個結構體就行了

struct timeval
{
time_t tv_sec; //秒 [long int]
suseconds_t tv_usec; //微秒 [long int], (10E-6 second)
};
struct timeval
{
long tv_sec;
long tv_usec;
};

然後取微秒的前三位就是小數了, 之後把秒 tv_sec 轉化為 tm 格式, 參數用秒的指針就行

struct tm * gmtime(const time_t * t);
//轉換成格林威治時間。有時稱為GMT或UTC。
struct tm * localtime(const time_t *t);
//轉換成本地時間。它可以透過修改TZ環境變數來在一台機器中,不同使用者表示不同時間.

下面是tm的部分參數

int tm_sec; //tm_sec表「秒」數,在[0,61]之間,多出來的兩秒是用來處理跳秒問題用的。/* Seconds: 0-59 (K&R says 0-61?) */
int tm_min; //tm_min表「分」數,在[0,59]之間。
int tm_hour; //tm_hour表「時」數,在[0,23]之間。
int tm_mday; //tm_mday表「本月第幾日」,在[1,31]之間。
int tm_mon; //tm_mon表「本年第幾月」,在[0,11]之間。
int tm_year; //tm_year要加1900表示那一年。 /* /* 年份,其值從1900開始 */*/
int tm_wday; //tm_wday表「本周第幾日」,在[0,6]之間。 /* Days since Sunday (0-6) */ /*其中0代表星期天,1代表星期一,以此類推 */
int tm_yday; //tm_yday表「本年第幾日」,在[0,365]之間,閏年有366日。 /*其中0代表1月1日,1代表1月2日,以此類推 */*/
int tm_isdst; //tm_isdst表是否為「日光節約時間」

------------------------------華麗麗的分割線--------------------------------------------------
由於很長時間沒編程了, 也沒有Linux環境, 我就簡單寫幾行代碼, 僅作參考

#include <stdio.h>
#include <time.h>
#include <sys/time.h>
#include<unistd.h>
//這四個不一定夠用了

struct timeval tv;
struct timezone tz;
struct tm * p_tm;
//變數沒有初始化習慣不好,不要學

gettimeofday(&tv, &tz);
p_tm = gmtime( (const time_t *)&tv.tv_sec );

字元串的組裝尤其格式問題自己解決吧
年 p_tm->tm_year+ 1900
月 p_tm->tm_mon+ 1
日 p_tm->tm_mday
時 p_tm->tm_hour+ 1
分 p_tm->tm_min+ 1
秒 p_tm->tm_sec+ 1
小數點後面的部分,注意不夠三位還是前面填充0 tv.tv_sec/1000

6. linux中的usleep是庫函數嗎

是C標准庫中的函數,在libc庫中實現。

使用前需包含unistd.h頭文件,函數原型為

intusleep(useconds_tusec);

參數usec為微秒,取值范圍[0,1000000]。

使用方法:

#include<unistd.h>
...
unsignedintusecs;
...
usleep(usecs);

7. linux 內核怎麼列印系統時間戳

在編譯Linux內核,配置時:make menuconfig ---> Kernel hacking --> show timing information on printks
當選中這個選項後,啟動內核,會在日誌信息前面加上時間戳。
從下面的輸出可以看出,時間精確到微秒(us)。

如下:

-------------------------------------------------------------------------------------------
Uncompressing Linux... done, booting the kernel.
[ 0.000000] Linux version 2.6.35.7+ (bshen@bamboo) (gcc version 4.4.1 (Sourcery G++ Lite 2010q1-202) ) #109 PREEMPT Mon Nov 14 15:11:15 CST 2011
[ 0.000000] CPU: ARM926EJ-S [41069265] revision 5 (ARMv5TEJ), cr=00053177
[ 0.000000] CPU: VIVT data cache, VIVT instruction cache
--------------------------------------------------------------------------------------------

閱讀全文

與linux獲取微秒相關的資料

熱點內容
樂高機器人編程是什麼課程 瀏覽:935
手機如何製作網站鏈接 瀏覽:557
繁體字qq網名 瀏覽:17
貝殼網的原始登錄密碼 瀏覽:876
求一個能看各種小說的網站 瀏覽:953
ps中優化的文件格式包括 瀏覽:149
電影解析網站 瀏覽:24
hdf文件如何打開 瀏覽:208
ota升級712能越獄嗎 瀏覽:675
極品飛車9主程序是哪個 瀏覽:518
java官網下載不了 瀏覽:359
電影《Il guardaspalle 》羅莎卡拉喬洛(1993) 瀏覽:930
主角叫林飛的系統流小說 瀏覽:588
論文數據如何注冊 瀏覽:137
關於大數據的來源以下理解正確的是哪些 瀏覽:931
ae電子書教程 瀏覽:567
20部德國二戰電影十大經典 瀏覽:403
90分鍾高清完整版推薦 瀏覽:343
李采覃 瀏覽:721

友情鏈接