【问题标题】:C++ Timer ProblemC++ 定时器问题
【发布时间】:2011-09-19 21:04:43
【问题描述】:

我写了一个计时器类。启动计时器后,我想知道是否已经过了 20 秒,如果是,我想调用一个函数或执行一段代码。那门课不起作用,但我不知道为什么。

编辑:它不起作用我的意思是 isTimeTout(seconds) 总是返回 true;我只想看看是否已经过了几秒钟,并在此基础上采取行动。 班级计时器{ 私人的: 无符号长请求时间; 上市: 无效开始(){ 乞求时间 = 时钟(); }

        unsigned long elapsedTime() {
            return ((unsigned long) clock() - begTime) / CLOCKS_PER_SEC;
        }

        bool isTimeout(unsigned long seconds) {
            return seconds >= elapsedTime();
        }
};

【问题讨论】:

  • 这个类应该使用isTimeout函数检查指定的时间是否已经过去,显然它不会给你一个自动通知,因为你必须使用一些操作系统工具......
  • 它到底是怎么不起作用的?它有什么问题?
  • 您需要提供更多信息。 “不起作用”是什么意思?展示你如何使用你的课程。
  • 我的意思是它不会通知我是否已经过了 20 秒

标签: c++ winapi


【解决方案1】:

clock() 测量的是 CPU 时间而不是 wall 时间。尝试改用time()difftime()

【讨论】:

  • clock() 在 Windows 中测量挂墙时间。该问题已标记为 winapi。
  • 是否应该轮询 time() 和 difftime() 才能工作????这不能满足我的需求..
【解决方案2】:

由于您使用的是 Windows,因此您可以坚持使用 clock()

错误在这里:

return seconds >= elapsedTime();

应该是:

return seconds <= elapsedTime();

不到 20 秒后,您现在拥有的内容将返回 true。翻转比较应该可以解决它。

【讨论】:

    【解决方案3】:

    尝试使用 time() 和 difftime() 如上所述。我以前也遇到过这个问题:)

    【讨论】:

    • 如果您的答案已经在这里,请投票。不要提供重复的答案。
    猜你喜欢
    • 1970-01-01
    • 2011-11-22
    • 2011-05-29
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多