c语言微秒
Ⅰ 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
}
程序分析:
前面一起住航分析一下该代码,
unsignedlongintTM_LODAE;声明一个长整型数据,
TR2=0;定时器2停止计时
TF2H=0;清除定时器2中断标志
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指令周期才会溢出。
该单片机的一个指令周期就是一个时钟周期.TMR2H=TM_LODAE>>8;TMR2L =TM_LODAE&0x00FF;置定时器寄存器的初值、
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);
}
新手,笑纳