我们一直用的是usleep()函数,这个函数用来延时再好不过了,usleep(10000) 就是延时10ms,在用户层程序中非常实用的。
创新互联公司,专注为中小企业提供官网建设、营销型网站制作、响应式网站开发、展示型网站制作、网站建设等服务,帮助中小企业通过网站体现价值、有效益。帮助企业快速建站、解决网站建设与网站营销推广问题。
timeval这个struct当中可以精确到微秒。
LINUX中示例:
#include stdio.h // for printf()
#include sys/time.h // for gettimeofday()
#include unistd.h // for sleep()
int main()
{
struct timeval start, end;
gettimeofday( start, NULL );
printf("start : %d.%d\n", start.tv_sec, start.tv_usec);
sleep(1);
gettimeofday( end, NULL );
printf("end : %d.%d\n", end.tv_sec, end.tv_usec);
return 0;
}
运行结果:
start : 1418118324.633128
end : 1418118325.634616
#include mmsystem.h
LONGLONG SchGetCurTicksCunt(VOID)
{
LARGE_INTEGERlitmp;
QueryPerformanceCounter(litmp);
return litmp.QuadPart;
}
例如多媒体时钟
可以用_nop_( )函数来实现微秒级的延时。
_nop_(); // 直接当成一条语句使用,产生一条NOP指令
NOP指令为单周期指令,可由晶振频率算出延时时间,对于12M晶振,延时1uS。
注:使用该函数时,需要将头文件#includeintrins.h包含进源文件中。
一个微秒级的延时函数今天要用到一个微秒级的定时函数,到网上search下,找了几个都不能用,我晕,无奈,还是自己动手比较好,赶紧贴出来。
免得以后要用的时候又不知道那里去找,方便自己也方便大家^_^ 又避免重复发明轮子^_^
/********************************************************************
Created: 2006/09/02
FileName: t.c
Author: Liu Qi
Purpose: 测试微秒级延时
*********************************************************************/
#include windows.h
#include time.h
#include stdio.h
ULONG GetTimeDis(struct tm first, struct tm second) //计算两次时间差
{
return abs((first.tm_hour * 3600 + first.tm_min * 60 + first.tm_sec)
- (second.tm_hour * 3600 + second.tm_min * 60 + second.tm_sec));
}
void Delay(ULONG ulMicroSeconds)
{
LARGE_INTEGER timeStop;
LARGE_INTEGER timeStart;
LARGE_INTEGER Freq;
ULONG ulTimeToWait;
if (!QueryPerformanceFrequency( Freq ))
return;
ulTimeToWait = Freq.QuadPart * ulMicroSeconds / 1000 / 1000;
QueryPerformanceCounter ( timeStart );
timeStop = timeStart;
while( timeStop.QuadPart - timeStart.QuadPart ulTimeToWait )
{
QueryPerformanceCounter( timeStop );
}
}
int main(void)
{
struct tm timeStart, timeEnd;
_getsystime(timeStart);
Delay(1000 * 1000 * 3); //3秒
_getsystime(timeEnd);
printf("用时:%d秒\n", GetTimeDis(timeStart, timeEnd));
return 0;
}