LINUX C 中如何产生一个时钟,比如27M的用于计时

LINUX C 中如何产生一个时钟,比如27M的用于计时,第1张

使用cpu的rdtsc汇编指令:

#include <stdio.h>

int get_rdtsc() ...{

return asm("rdtsc")

}

这个函数可以获得cpu的时间戳,分辨率当然是cpu的主频, 如果cpu频率高的话, 27MHz的定时误差应该不是很大。但是, 你要输出和处理这个时钟信号产生的延迟也不太好控制,毕竟不是实时系统。。。。

楼主的程序没有用 signal 注册 SIGPROC 对应函数,在 for 循环的时候可能已经发生了多次中断和重置计时。至于比1秒大,手册中有解释 Timers will never expire before the requested time, but may expire some (short)  time  afterward,  which depends on the system timer resolution and on the system loadsee time(7).

要在1秒间隔调用一个函数,需要加上 signal,比如

#include <signal.h>

#include <sys/time.h>

#include <stdio.h>

#include <time.h>

static struct itimerval a

void timeover( int event )

{

    struct itimerval b

    printf( "timeover at %ld\n", time(NULL) )

    getitimer( ITIMER_PROF, &b )

    printf( "sec = %ld, usec = %ld\n", b.it_value.tv_sec, b.it_value.tv_usec )

}

int main()

{

    signal( SIGPROF, timeover )

    printf( "begin at %ld\n", time(NULL) )

    a.it_interval.tv_sec = 1

    a.it_interval.tv_usec = 0

    a.it_value.tv_sec = 1

    a.it_value.tv_usec = 0

    setitimer( ITIMER_PROF, &a, NULL )

    while(1)

    return 0

}

对关注性能的程序开发人员而言,一个好的计时部件既是益友,也是良师。计时器既可以作为程序组件帮助程序员精确的控制程序进程,又是一件有力的调试武器,在有经验的程序员手里可以尽快的确定程序的性能瓶颈,或者对不同的算法作出有说服力的性


欢迎分享,转载请注明来源:内存溢出

原文地址:https://54852.com/yw/7296304.html

(0)
打赏 微信扫一扫微信扫一扫 支付宝扫一扫支付宝扫一扫
上一篇 2023-04-04
下一篇2023-04-04

发表评论

登录后才能评论

评论列表(0条)

    保存