不同操作系统中的c clock()

叶ch

我需要一个60HZ计时器(16.6毫秒触发一次)

它在Windows(mingw gcc)中工作良好,但在liunx(gcc)中则工作不佳

有人可以帮我吗?谢谢

#include <stdio.h>
#include <time.h>t
#define PRE_MS CLOCKS_PER_SEC / 1000
int main()
{
    clock_t pre = clock();
    int cnt = 0;
    printf("CLOCKS_PER_SEC = %d\n", CLOCKS_PER_SEC);
    while (1)
    {
        clock_t diff = clock() - pre;
        if (diff > 16 * PRE_MS)
        {
            cnt++;
            if (cnt > 60)
            {
                printf("%d\n", (int)pre);
                cnt = 0;
            }
            pre += diff;
        }
    }
}
  • Windows中的printf pre 1s
CLOCKS_PER_SEC = 1000
1020
2058
3095
4132
5169
6206
7243
8280
9317
  • Linux中的printf pre 2s
CLOCKS_PER_SEC = 1000000
1875000
3781250
5687500
7593750
9500000
11406250
13312500
15218750
风向标

首先是一个误解:60 Hz不是每秒17次操作,而是60次。

其次,周期检查是读取clock()两次并丢弃任何printf()要调用的时间间隔AFAIKCLOCKS_PER_SEC在Linux上比Windows系统更大,因此您更有可能“丢掉”时钟滴答。阅读clock() 一次,例如:

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

int main(void)
{
    unsigned long long tickcount = 0;
    clock_t baseticks = clock();    
    while (tickcount < 180) {           // for 3 seconds
        tickcount++;
        clock_t nexttick = (clock_t) (baseticks + tickcount * CLOCKS_PER_SEC / 60);
        while(clock() < nexttick) {}    // wait
        printf("Tick %llu\n", tickcount);
    }
    return 0;
}

该代码从总的经过时间开始工作,因此所有不是精确时钟滴答数的间隔都将被平均(而不是累积舍入误差)。

在某些时候,from的值clock()将溢出/自动换行,因此可以运行任何时间长度的实际实现都必须注意这一点。

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

C:Windows和其他操作系统中clock()的不同实现?

来自分类Dev

我如何在Linux操作系统上使用clock_getttime()在C中以纳秒为单位记录进程执行时间?

来自分类Dev

在C中的函数clock()

来自分类Dev

考虑操作系统配置的时区的std :: chrono :: system_clock :: now()

来自分类Dev

不同版本的操作系统?

来自分类Dev

是否需要在不同的操作系统版本中测试 c# winform?

来自分类Dev

在不同的语言操作系统中,类型的字段是否相同?

来自分类Dev

在不同的操作系统中获取相同的/ etc

来自分类Dev

定义素数中ap:clock元素的样式

来自分类Dev

仅在表中显示Javascript World Clock

来自分类Dev

systemd在clock_gettime中中止

来自分类Dev

Python中的time.clock()范围

来自分类Dev

C ++ high_resolution_clock奇怪的输出

来自分类Dev

在clock_gettime()中使用_COARSE变体仍会调用sys_clock_gettime()系统调用

来自分类Dev

操作系统中的抽象

来自分类Dev

操作系统中的PCB

来自分类Dev

使GO构建适应不同的操作系统

来自分类Dev

python基于操作系统的不同斜杠

来自分类Dev

加密多个分区(不同的操作系统)

来自分类Dev

使用C中的NDK获取操作系统版本

来自分类Dev

如何在目标C中获取操作系统名称

来自分类Dev

是否可以在c ++中检测操作系统?

来自分类Dev

c中的操作系统内存管理分页方案

来自分类Dev

每本操作系统书籍中的C编程语言

来自分类Dev

如何在 C++ 中获取操作系统名称?

来自分类Dev

分开存储在一列中的Clock In和Clock Out数据

来自分类Dev

比较rdtsc clock和c ++ 11 std :: chrono :: high_resolution_clock产生的时间测量结果

来自分类Dev

操作系统如何从不同的文件系统中拾取数据

来自分类Dev

同一操作系统中两个文件系统的文件大小是否不同?

Related 相关文章

  1. 1

    C:Windows和其他操作系统中clock()的不同实现?

  2. 2

    我如何在Linux操作系统上使用clock_getttime()在C中以纳秒为单位记录进程执行时间?

  3. 3

    在C中的函数clock()

  4. 4

    考虑操作系统配置的时区的std :: chrono :: system_clock :: now()

  5. 5

    不同版本的操作系统?

  6. 6

    是否需要在不同的操作系统版本中测试 c# winform?

  7. 7

    在不同的语言操作系统中,类型的字段是否相同?

  8. 8

    在不同的操作系统中获取相同的/ etc

  9. 9

    定义素数中ap:clock元素的样式

  10. 10

    仅在表中显示Javascript World Clock

  11. 11

    systemd在clock_gettime中中止

  12. 12

    Python中的time.clock()范围

  13. 13

    C ++ high_resolution_clock奇怪的输出

  14. 14

    在clock_gettime()中使用_COARSE变体仍会调用sys_clock_gettime()系统调用

  15. 15

    操作系统中的抽象

  16. 16

    操作系统中的PCB

  17. 17

    使GO构建适应不同的操作系统

  18. 18

    python基于操作系统的不同斜杠

  19. 19

    加密多个分区(不同的操作系统)

  20. 20

    使用C中的NDK获取操作系统版本

  21. 21

    如何在目标C中获取操作系统名称

  22. 22

    是否可以在c ++中检测操作系统?

  23. 23

    c中的操作系统内存管理分页方案

  24. 24

    每本操作系统书籍中的C编程语言

  25. 25

    如何在 C++ 中获取操作系统名称?

  26. 26

    分开存储在一列中的Clock In和Clock Out数据

  27. 27

    比较rdtsc clock和c ++ 11 std :: chrono :: high_resolution_clock产生的时间测量结果

  28. 28

    操作系统如何从不同的文件系统中拾取数据

  29. 29

    同一操作系统中两个文件系统的文件大小是否不同?

热门标签

归档