c語言如何精確到微秒級別,我正在測試程序的運行時間,現在已經精確到毫秒了

用sleep肯定是至少50ms。

MutliMedia Timer可以達到ms級別,但是精度沒有嚴格的保障。

timeBeginPeriod 設定精度;
timeSetEvent 來設定事件;
timerEndPeriod 還原精度;

另外還有一個精度更高的,但它不是時鍾,是脈沖 QueryPerformanceFrequency 最高精度是0.8ms

由於計算機的本身時鍾就存在著一定的誤差,而且較大,
所以用它作為高精度時鍾不太好,更高級的辦法就是利用外部的高精度信號源,通過硬體引入計算機。

但是計算機本身的一般來說足夠了。

Ⅱ c語言如獲取系統時間精確到微秒,給出函數,並舉例

#include <mmsystem.h>

LONGLONG SchGetCurTicksCunt(VOID)
{
LARGE_INTEGERlitmp;
QueryPerformanceCounter(&litmp);
return litmp.QuadPart;
}
例如多媒體時鍾

Ⅲ 求一個C語言的微秒級延時函數

c語言,微秒級延時


voidDelay_us(unsignedchartime_us)

{

unsignedlongintTM_LODAE;

TR2=0;//Stoptimer

TF2H=0;//Cleartimeroverflowflag

TM_LODAE=65535-(UINT)(SYSCLK/1000000)*(UINT)(time_us);

//TMR2=-((UINT)(SYSCLK/1000000)*(UINT)(time_us));

TMR2H=TM_LODAE>>8;

TMR2L =TM_LODAE&0x00FF;

TR2=1;//Starttimer

while(!TF2H);//Waittilltimeroverflowoccurs

TR2=0;//Stoptimer

}

程序分析:

  1. 前面一起住航分析一下該代碼

  2. unsignedlongintTM_LODAE;聲明一個長整型數據,

  3. TR2=0;定時器2停止計時

  4. TF2H=0;清除定時器2中斷標志

  5. TM_LODAE=65535-(UINT)(SYSCLK/1000000)*(UINT)(time_us);計算定時器初值。SYSCLK是系統的晶振頻率,SYSCLK/1000000是系統1uS執行的指令。(UINT)(SYSCLK/1000000)*(UINT)(time_us)就是系統time_us執行的指令數。65535-(UINT)(SYSCLK/1000000)*(UINT)(time_us)定時器需要TM_LODAE指令周期才會溢出。

  6. 該單片機的一個指令周期就是一個時鍾周期.TMR2H=TM_LODAE>>8;TMR2L =TM_LODAE&0x00FF;置定時器寄存器的初值、

  7. TR2=1;啟動單片機計時 while(!TF2H); 等待定時器2寄存器溢出。TR2=0;停止計時,在這段代碼注釋中已經說明了應該有50nS的誤差,這個是函數調用產生的。

Ⅳ 如何在C語言中使時間暫停幾毫秒或者微秒

使用_sleep(time)函數。
該函數是以毫秒為單位進行延時。
在某些編譯器上,已經被停止使用。

Ⅳ c語言有辦法取得當前納秒或微秒級的時間嗎

C語言獲取當前系統時間的幾種方式
C語言獲取系統時間的幾種方式
C語言中如何獲取時間?精度如何?

1 使用time_t time( time_t * timer ) 精確到秒

2 使用clock_t clock() 得到的是CPU時間精確到1/CLOCKS_PER_SEC秒

3 計算時間差使用double difftime( time_t timer1, time_t timer0 )

4 使用DWORD GetTickCount() 精確到毫秒

5 如果使用MFC的CTime類,可以用CTime::GetCurrentTime() 精確到秒

6 要獲取高精度時間,可以使用

BOOL QueryPerformanceFrequency(LARGE_INTEGER *lpFrequency)

獲取系統的計數器的頻率

BOOL QueryPerformanceCounter(LARGE_INTEGER
*lpPerformanceCount)

獲取計數器的值

然後用兩次計數器的差除以Frequency就得到時間。

7 Multimedia Timer Functions

The following functions are used with multimedia timers.

timeBeginPeriod/timeEndPeriod/timeGetDevCaps/timeGetSystemTime

Ⅵ 怎麼用C語言設計一個延時10萬微秒子程序

#include "windows.h"//卻要包含這處頭文件
void Mydelay(void){
Sleep(100);
}

Ⅶ 如何用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

Ⅷ 單片機C語言中怎麼實現微秒級延時

大致的原理 就是根據CPU的指標 得到CPU執行一條指令的時間t
然後通過循環一定次數 即執行一定條數的指令N
t*N就是時間了
僅適用於單線程的單片機
對於有線程或者是有中斷的情況下會不準確

Ⅸ 用C語言將微秒轉換成年月日十分秒,求代碼

#include"stdio.h"
intyears(intday,int*year)
{
if(day<365)returnday;

if(*year%4==0&&*year%100!=0||*year%400==0)
{if(day>365)
day-=366;
(*year)++;
}
else
{
day-=365;
(*year)++;
}
day=years(day,year);
returnday;
}

voidmonth(int*mon,int*day,intyear)
{
switch(*mon)
{
case1:case3:case5:case7:case8:
case10:case12:
{
if((*day)>31)
{
(*mon)++;
*day=*day-31;
}
elsereturn;

}break;
case4:case6:case9:case11:
{
if((*day)>30)
{
(*mon)++;
*day=*day-30;
}elsereturn;

}break;
case2:{
if(year%4==0&&year%100!=0||year%400==0)
{
if((*day)>29)
{
(*mon)++;
*day=*day-29;
}elsereturn;

}
else
{
if((*day)>28)
{
(*mon)++;
*day=*day-28;
}elsereturn;

}
}break;
default:break;
}
month(mon,day,year);

}

main()
{
floatn,sec;intday,min,hour,mon=1,y;
intyear;floati;intd;
n=13014961214352750.0;
year=1601;
sec=n/1000000;
day=(int)(sec/3600/24);
i=day*24.0*3600;
sec-=i;
d=sec;
min=d/60%60;
hour=d/3600;
i=hour*3600+min*60;
sec-=i;
d=sec;
day=years(day,&year);
month(&mon,&day,year);
printf("thetimeis %d/%2d/%2d%2d:%2d:%2.0f ",year,mon,day,hour,min,sec);
}

新手,笑納