【问题标题】:Stopwatch class in c++c++中的秒表类
【发布时间】:2017-12-08 23:51:22
【问题描述】:

我必须用 C++ 编写一个秒表类。我尝试这样做的方法是定义一个变量来保存圈数(名为“时间”)和一个bool,我用它来查看手表是启动还是停止。输入char 时,计时器应启动并设置time1。当输入另一个字符时,bool 切换到false 并设置time2,然后打印time2-time1。这应该是可重复的,直到输入“n”

我也不太确定我理解 time_t 的时间单位。在我的代码中,每次我尝试测量一圈的间隔时,我都会得到 ±40 个单位的返回值,我猜这是运行时间程序的时间,而不是实际的时间间隔。

#ifndef stoppuhr_hpp
#define stoppuhr_hpp

#include <iostream>
#include <time.h>

class Stoppuhr{
private:
    bool running;
    clock_t time;

public:
    void pushButtonStartStop () {
        char t=0;
        running=false;
        time=0;
        std::cout << "to start/stop watch please press a key, to end 
clock type 'n' " << std::endl;
        clock_t time1=0;
        clock_t time2=0;
        std::cout << time;

        while (t!='n') {
            std::cin >> t;
            running= !running;
            if (running) {
                time1=clock();
            }
            else {
                time2=clock();
                time+=time2-time1;
                std::cout << time << std::endl;
            }
        }

    }

};

#endif /* stoppuhr_hpp */

【问题讨论】:

  • 在 C++ 中你应该 #include &lt;ctime&gt; 而不是 time.h。对于 POSIX 兼容系统,time_t 的单位以秒为单位。 C++ 标准的唯一保证是它是在算术类型中定义的。
  • 我不熟悉这些函数,但是当我向 Google 询问“time.h clock()”时the first suggestion 给出了答案。
  • 显然是作业题。

标签: c++ time time.h


【解决方案1】:

我也不太确定我是否理解 time_t 的时间单位。

time_t 表示的时间单位是实现指定的。通常,它代表 POSIX 指定的秒数。

但是,您不能在程序中的任何地方使用time_t

我猜是程序的运行时间

我建议不要猜测,而是阅读文档。 clock() 返回某个时间点以来程序使用的处理器时间。因此,减去clock() 返回的两个时间点将为您提供这些时间点之间使用的处理器时间。 clock_t的单位是1 / CLOCKS_PER_SEC秒。

我每次得到±40个单位的返回值

clock 的粒度由实现指定。您的系统上可能有 40 个单位。该程序在等待输入时几乎不会消耗任何处理器时间。


我要写一个秒表类

秒表通常测量真实世界的时间,即挂钟时间。测量处理器时间对于这项任务是徒劳的。

我建议改用std::chrono::steady_clock::now

如果你坚持使用time.h,那么你可以使用time(nullptr)来获取挂钟时间,但我不推荐。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-09-05
    • 1970-01-01
    • 2021-07-27
    • 2011-05-05
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多