轮询 C 中的时钟周期数 sw

polling the number of clock cyclesw in C

我正在尝试连续轮询时钟周期数,仅当周期数为 100 + 开始时间时才打印我的语句。这样如果我的 start = 1000000,打印语句应该只在 end = 1000100 时执行 它应该显示例如假设在开始时,时间 = 1000000 您好,start:1000000的值和end:1000101

的值
#include <stdio.h>
#include <stdlib.h>
#include <time.h>

void main()
{
        clock_t start,end;
        start = clock();
        while(end=clock() < (start + 100))
        {};
        printf("Hello, value of start:%d and value of end:%d", start, end);
}

但是我越来越 您好,start:0的值和end:0

的值

我已经编辑了我的代码并获得了 end=0.0000 的值。这是我在下面编辑的代码

#include <stdio.h>
#include <stdlib.h>
#include <time.h>

void main()
{
        clock_t start;
        start = clock();
        clock_t end = start;
        printf("Hello");
        while(end < (start + 100))
        {
                end = clock();
        };
        printf("value of end is %f \n", end);
}

我很确定这一行:

while(end=clock()< start + 100)

需要这样:

while( (end=clock()) < (start + 100) )

写得更好:

void main()
{
        clock_t start = clock();
        clock_t end = start;
        while(end < (start + 100))
        {
            end = clock();
        };
        printf("Hello, value of start:%d and value of end:%d", (int)start, (int)end);
}

while(end=clock()< start + 100)

不正确,因为 = 的优先级低于 <

准确地说,您的陈述将被这样解释(注意优先顺序:+ 然后 < 然后 =):

while( end = ( clock() < ( start + 100 ) ) )
    ;

( clock() < ( start + 100 ) ) 是一个布尔表达式,要么是 1,要么是 0;你的 while 循环运行直到条件变得错误,这意味着 ( clock() < ( start + 100 ) ) 是 0,然后分配给 end.

所以不要犹豫,在表达式中加上额外的括号。在这种情况下,你需要的是:

while( ( end=clock() ) < start + 100)
    ;

第一个问题正如其他人所说,if条件中的优先级是错误的。第二个是 clock_t 不一定可以表示为整数。最好的办法是强制转换为 double,这将在 clock_t 是 64 位整数但值相对较小的常见情况下提供足够的范围。