在 C 中使用硬件定时器

Dod*_*ddy 2 c linux optimization modulo

好的,所以我有一些 C 代码来执行数学运算,这几乎可以花费任何时间(当然,这取决于提供给它的操作数)。我想知道是否有一种方法可以注册某种方法,该方法每n秒调用一次,可以分析操作的状态,即它当前处于什么迭代,可能使用硬件定时器中断或其他什么?

我问这个的原因是因为我知道实现这一点的常用方法是跟踪变量中的当前迭代;比如说,一个整数被调用progress并且在代码中有一个像这样的 IF 语句:

if ((progress % 10000) == 0)
    printf("Currently at iteration %d\n", progress);
Run Code Online (Sandbox Code Playgroud)

但我相信一个 mod 操作需要相对较长的时间来执行,所以从优化的角度来看,将它放在一个循环中的想法会运行很多很多次让我感到害怕。

所以我觉得有一种外部方式来表示进度打印是好的和有效的。有什么好的方法可以执行此操作,还是简单的“mod 检查”是最好的(在优化方面)?

pmg*_*pmg 5

我会使用 mod 检查,但可能会使用减法 :-)

icount = 0;
progress = 10000;
/* ... */
    if (--progress == 0) {
        progress = 10000;
        printf("Currently at iteration %d0000\n", ++icount);
    }
/* ... */
Run Code Online (Sandbox Code Playgroud)