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);
}

新手,笑纳