Linux编程itimerval计时器结构体问题

Linux编程itimerval计时器结构体问题,第1张

楼主的程序没有用 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

}

现象描述:

1、time.clock 在win系统和linux系统下对相同程序的计时结果不一致

2、到底应该用什么时间计时?为什么用time.time与time.clock计时会有那么大的差异

在计算机领域有多种时间。

第一种称作CPU时间或执行时间,用于测量在执行一个程序时CPU所花费的时间。第二种称作挂钟时间,测量执行一个程序时的总时间。挂钟时间也被称作流逝时间或运行时间。与CPU时间相比,挂钟时间通常长些,因为CPU执行测量的程序可能同时还在执行其它程序的指令。

另一个重要概念是所谓的系统时间,由系统时钟测量。系统时间表示计算机系统时间传递的概念。要记住系统时钟是可以由 *** 作系统修改的,就是修改系统时间。

在Unix系统上,time.time的作用与Windows相同,但time.clock的意义不同。

在Unix系统上,time.clock以秒为单位返回当前处理器时间,例如,执行当前线程所花费的CPU时间。而在Windows上,它是以秒为单位的返回自首次调用该函数以来所流逝的系统时间。

以我遇到的Ubuntu系统上运行time.time和time.clock的例子:

time.time()显示系统时间过去大概1秒,而time.clock()显示花费在当前进程上的CPU时间只有于1毫秒。

而win下time.time()和time.clock()显示系统时间都是大致过去了1秒

在测量程序准确性能时应该使用哪一个呢?

这要视情况而定。如果程序运行的系统能够提供足够的资源给程序,例如,一个运行基于Python的web应用程序的web服务器,则使用time.clock()来测量程序会更有意义,因这个web应用程序可能是服务器上的主要程序 。如果程序运行的系统上还同时运行着其它大量程序,则使用time.time()进行测量会更有意义。 如果不是这样,就应该使用基于挂钟的计时器来测量程序的性能,因为这样通常能反应程序的环境。

放结论,一般情况下:

1、win用time.clock或time.time

2、linux 下用time.time  或 datetime.datetime.now().timestamp()

【1】(重要)https://blog.csdn.net/ao985438294363006/article/details/101349790    Python测量时间,用time.time还是time.clock 

让程序自动运行有几种方法:

1、编写脚本,脚本内容是定时循环调用脚本,然后运行一次脚本(linux的shell脚本,windows的批处理脚本)

2、让程序代码循环重复做相同工作


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

原文地址: http://outofmemory.cn/yw/7400530.html

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

发表评论

登录后才能评论

评论列表(0条)

保存