Loading [MathJax]/jax/input/TeX/config.js
首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >断点不正确的秒表

断点不正确的秒表
EN

Stack Overflow用户
提问于 2016-07-09 17:02:41
回答 3查看 159关注 0票数 9

我有一个主秒表与4个迷你秒表为每一步。经过一段时间之后,下面是一个定时器应该如何看上去的示例:

代码语言:javascript
运行
AI代码解释
复制
MAIN:  00 : 14 : 57
-------------------
MINI1: 00 : 04 . 17
MINI2: 00 : 06 . 40
MINI3: 00 : 02 . 54
MINI4: 00 : 01 . 46

迷你计时器应该与主定时器相加,就像它们在这种情况下所做的那样。用我目前的计时器,它似乎总是离.02毫秒,所以在这种情况下,它们加起来就是00 : 14 . 55,而不是00 : 14 . 57

这是我当前计时器的一个JSFiddle。我认为这个问题很可能发生在stopwatch.js文件中,但是我不知道为什么会这样,因为我正在使用Date.now()来计算已经过去了多少时间。下面是stopwatch.js文件,它是单个秒表的代码:

代码语言:javascript
运行
AI代码解释
复制
class Stopwatch {
  constructor (opts) {
    this.isOn = false;
    this.time = 0;
    this.elem = opts.elem;
  }

  start () {
    this.offset = Date.now();
    this.interval = setInterval(() => this._update(), 10);
    this.isOn = true;
  }

  stop () {
    clearInterval(this.interval);
    this.offset = null;
    this.interval = null;
    this.isOn = false;
  }

  reset () {
    this.time = 0;
    this._render();
  }

  _update () {
    this.time += this._getTimePassed();
    this._render();
  }

  _getTimePassed () {
    const now = Date.now();
    const timePassed = now - this.offset;
    this.offset = now;
    return timePassed;
  }

  _timeFormatter (milliseconds) {
    const padZero = (time) => `0${time}`.slice(-2);

    const minutes = padZero(milliseconds / 60000 | 0);
    const seconds = padZero((milliseconds / 1000 | 0) % 60);
    const centiseconds = padZero((milliseconds / 10 | 0) % 100);

    return `${minutes} : ${seconds} . ${centiseconds}`;
  }

  _render () {
    this.elem.textContent = this._timeFormatter(this.time);
  }
}

我在上面提到的JSFiddle中包含了所有东西,如果读起来更容易的话,在这个要旨中也是如此。如有任何指导,将不胜感激。

EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2016-07-12 19:59:31

你说的是20毫秒的延迟,这可能是由许多因素造成的。

  • 正如Flynn1179所建议的,可能在对Date.now()的调用之间
  • JavaScript的setInterval漂移!这是用来证明这一点的垃圾桶。对于在单个线程上运行的语言来说,您不可能期望每10‘t精确地安排任务一次,而您的_update方法正是这样要求的。
  • 您忽略了厘米计数器中的0-9ms,这是在主计时器中计算的。这可能是最大的促成因素。例如,假设迷你表A为15毫秒,微型表B为15毫秒。迷你表A将显示'01',微型手表B将显示'01',但主表将显示'03‘自30毫秒已过。

为了正确地解决这个问题,我建议重新设计您的解决方案,以便将所有秒表封装在一个StopwatchManager中,它同时呈现所有秒表,并通过添加迷你表的时间来计算主表的总时间。您可能还需要研究如何使用requestAnimationFrame来呈现而不是setInterval

票数 5
EN

Stack Overflow用户

发布于 2016-07-09 17:09:38

你停止一个计时器,在下一行,开始下一个计时器。您的问题部分在于,时间在这两个方法调用之间传递。

而且,您的“停止”方法甚至不使用当前时间,它只是追溯地从上次更新时停止它,它不会执行最终的_update

如果您真的希望它精确地加起来,那么在您的updateMiniTimers方法中使用updateMiniTimers,并将它传递给两个调用,以确保它们在同一时间点停止/启动,并在stop调用之后执行最终呈现。

一般而言,在方法范围内:

代码语言:javascript
运行
AI代码解释
复制
method() {
  var a = Date.now();
  var b = Date.now();
}

A和b绝对不能保证是相同的,没有任何方法调用是瞬时的。

票数 1
EN

Stack Overflow用户

发布于 2016-07-18 08:06:30

我同意法拉兹关于可能的原因的看法。我还将检查各司的舍入错误。无论如何,如果您想使它更健壮和可扩展,您可以将您的时间点看作列表中不断扩展的元素。每当秒表启动时,您都会将列表中最后一个元素的索引记录为起始点,当结束时将最后一个元素的索引记录为终结点。这将允许您拥有精确的定时器层次结构。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/38287667

复制
相关文章
秒表检定仪时间检定仪检定电子秒表/机秒表
SYN5301型时间检定仪是根据JJG237-2010《秒表检定规程》的要求制作的一款多功能,综合性的时间检定自动测试装置,用于检定机械秒表、电子秒表、指针式电秒表、数字式电秒表、数字式毫秒仪,以及各种计时器等,被测仪器通过测量该标准时间间隔信号,得到被检仪器测量该标准时间间隔信号的实际测量值,从而得到被检仪器测量误差,达到检定的目的,适用于各种类秒表的量值传递,可以建立秒表检定仪标准装置,开展对时间类仪器进行检定/校准。
时频专家
2020/01/19
1.2K0
秒表检定仪时间检定仪检定电子秒表/机秒表
秒表检定装置秒表检定仪时间检定仪秒表检定设备
该款设备结合了秒表检定仪、日差测量仪/校表仪、指针式电秒表检定仪、标准时间间隔发生器等4种功能,采用高稳定度石英晶体振荡器作为时间基准,使用7寸大液晶触摸屏,采用大规模集成电路FPGA技术,全数字控制,实现高精度时间间隔输出,整机具有高稳定度、高准确度的优点,功能完善,操作方便,抗干扰能力强。可供各级计量部门、工厂、院校及各科研单位检定401/405电秒表,407/408电秒表、411数字式毫秒计、415/417/417B型数字式电秒表等时间类仪器。
时频专家
2020/01/15
8640
秒表检定装置秒表检定仪时间检定仪秒表检定设备
秒表检定仪时间检定仪检定电子/机械秒表
     SYN5301型秒表检定仪时间检定仪是一款高精度时间检定仪。本设备是根据JJG237-2010《秒表检定规程》的要求制作的一款多功能,综合性的时间检定自动测试装置,用于检定机械秒表、电子秒表、指针式电秒表、数字式电秒表、数字式毫秒仪,以及各种计时器等,被测仪器通过测量该标准时间间隔信号,得到被检仪器测量该标准时间间隔信号的实际测量值,从而得到被检仪器测量误差,达到检定的目的,适用于各种类秒表的量值传递,可以建立秒表检定仪标准装置,开展对时间类仪器进行检定/校准。
时频专家
2020/01/16
1.1K0
秒表检定仪时间检定仪检定电子/机械秒表
python小练习----秒表
from tkinter import * import time class StopWatch(Frame):     '''实现一个秒表部件'''     msec=50     def __init__(self,parent=None,**kw):         Frame.__init__(self,parent,kw)         self._start = 0.0         self._elapsedtime =0.0         self._running = False         self.timestr = StringVar()         self.makeWidgets()     def makeWidgets(self):         '''制作时间标签'''         l = Label(self,textvariable=self.timestr)         self._setTime(self._elapsedtime)         l.pack(fill=X,expand=NO,pady=2,padx=2)     def _update(self):         '''用逝去的时间更新标签'''         self._elapsedtime=time.time() - self._start         self._setTime(self._elapsedtime)         self.timer = self.after(self.msec,self._update)     def _setTime(self,elap):         '''将时间格式改为分:秒:百分秒'''         minutes = int(elap/60)         seconds = int(elap-minutes*60.0)         hseconds = int((elap-minutes*60.0-seconds)*100)         self.timestr.set('%02d:%02d:%02d:'%(minutes,seconds,hseconds))     def Start(self):         '''开始秒表'''         if not self._running:             self._start = time.time() - self._elapsedtime             self._update()             self._running = True     def Stop(self):         '''停止秒表'''         if self._running:             self.after_cancel(self.timer)             self._elapsedtime = time.time()-self._start             self._setTime(self._elapsedtime)             self._running = False     def Reset(self):         '''重设秒表'''         self._start = time.time()         self._elapsedtime = 0.0         self._setTime(self._elapsedtime) if __name__ =='__main__':     def main():         import tkinter         root =Tk()         sw =StopWatch()         sw.pack(side=TOP)         Button(root,text='Start',command=sw.Start).pack(side=LEFT)         Button(root,text='Stop',command=sw.Stop).pack(side=LEFT)         Button(root,text='Reset',command=sw.Reset).pack(side=LEFT)         Button(root,text='Quit',command=sw.quit).pack(side=LEFT)         root.mainloop()     main()
用户7886150
2020/12/28
1.1K0
秒表检定仪的使用说明
SYN5301型时间检定仪是根据JJG237-2010《秒表检定规程》的要求制作的一款多功能,综合性的时间检定自动测试装置,用于检定机械秒表、电子秒表、指针式电秒表、数字式电秒表、数字式毫秒仪,以及各种计时器等,被测仪器通过测量该标准时间间隔信号,得到被检仪器测量该标准时间间隔信号的实际测量值,从而得到被检仪器测量误差,达到检定的目的,适用于各种类秒表的量值传递,可以建立秒表检定仪标准装置,开展对时间类仪器进行检定/校准。
时频专家
2020/01/07
1.3K0
VisualStudio 打断点和不打断点的区别
因为小伙伴告诉我他的代码在打断点的时候可以运行,但是在不打的时候出现异常。我去他那里看到,真的是这样,最后发现原来是代码写错了。本文来告诉大家,如果遇到了进入断点和没有进入有区别,可能的问题。
林德熙
2020/02/17
1K0
OD_条件断点/消息断点
“领空”这个词用来形容我们在调试某个程序的时候的正在操作或观察的内存区域
阿婆
2019/07/26
2K0
OD_条件断点/消息断点
OD常用断点之CC断点
前言 在做Windows平台软件逆向时,Ollydbg是极其常用的逆向工具,动态调试功能非常强大。在调试过程中,断点的使用有助于确定关键的破解位置,今天讲解的内容是OD常用断点中的CC
七夜安全博客
2018/06/21
1.7K0
Flutter 绘制集录 | 秒表盘的绘制
本文的目的在于绘制练习,将被收录在 FlutterUnit 的绘制集录当中。另外在 《Flutter 语法基础 - 梦始之地》 中有一章需要使用这个表盘,但并不想涉及过多的绘制知识,故而在此进行实现。效果如下,外圈是线条围成的表盘,内部有个小圆指示当前位置,中间显示信息文字。
张风捷特烈
2022/09/20
1K0
Flutter 绘制集录 | 秒表盘的绘制
JavaScript原生秒表、计时器
可以开始、暂停、清除。 效果图: 下面贴代码: <!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8"> <titl
晓晨
2018/06/22
1.4K0
pycharm 条件断点_linux打断点
遇到一个问题,由于数据量较大,直接debug调试太费时间,看了文末链接的博文,结合自身实践,于是有了这篇博文。
全栈程序员站长
2022/11/17
1.5K0
pycharm 条件断点_linux打断点
pycharm管理断点怎么删除断点
3、进行点击了run菜单之后弹出了下拉菜单选中为 view breakpoints 的选项
狼啸风云
2020/01/14
3.2K0
pycharm管理断点怎么删除断点
熟练使用IDEA的断点调试(Breakpoint),大大提升你调试代码的效率(行断点、属性断点、异常断点、条件断点、远程debug...)【享学Java】
版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。
YourBatman
2019/09/03
14.6K1
熟练使用IDEA的断点调试(Breakpoint),大大提升你调试代码的效率(行断点、属性断点、异常断点、条件断点、远程debug...)【享学Java】
断点续传的例子
package com.test.bsecond.y_2020.month_01.day0113; import java.io.*; import java.net.HttpURLConnection; import java.net.URL; public class DuanFile { public static void main(String[] args) { try { String path = "https://s2.ax1x.
Dream城堡
2022/01/07
2.1K0
Google广告显示不正确的问题
互联网从业人员相比对于Google Adsense应该非常熟悉,它就像我们生活中常见的楼宇电梯电视广告一样,是互联网上的一种广告类型。每个网站通过安装一块电视,定期的向用户播放广告。只不过Google的这块电视,能够根据网站的内容、用户的访问行为等一系列大数据为每个用户投放最感兴趣的内容。
大江小浪
2020/03/30
3.8K0
程序断点
程序断点是指由于有特殊事件(中断事件)发生,计算机暂停当前的任务(即程序),转而去执行另外的任务(中断服务程序),然后再返回原先的任务继续执行。所谓断点就是程序被中断的地方,这个词对于解密者来说是再熟悉不过了。那么什么又是中断呢?中断就是由于有特殊事件(中断事件)发生,计算机暂停当前的任务(即程序),转而去执行另外的任务(中断服务程序),然后再返回原先的任务继续执行。打个比方:你正在上班,突然有同学打电话告诉你他从外地坐火车过来,要你去火车站接他。然后你就向老板临时请假,赶往火车站去接同学,接着将他安顿好,随后你又返回公司继续上班,这就是一个中断过程。我们解密的过程就是等到程序去获取我们输入的注册码并准备和正确的注册码相比较的时候将它中断下来,然后我们通过分析程序,找到正确的注册码。所以我们需要为被解密的程序设置断点,在适当的时候切入程序内部,追踪到程序的注册码,从而达到crack的目的。
狼啸风云
2019/10/22
2.5K0
程序断点
XCode的debug断点调试
debug 流程控制 当你通过 Xcode 的源码编辑器的侧边槽 (或者通过下面的方法) 插入一个断点,程序到达断点时会就会停止运行。 调试条上会出现四个你可以用来控制程序的执行流程的按钮。 从左
用户1941540
2018/05/11
1.9K0
日期差的天时分秒表示SQL
版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/wzy0623/article/details/53908772
用户1148526
2019/05/25
1.2K0
VS2012使用条件断点和内存断点
如果对a打下断点,那么每次循环的时候都会触发一次断点。此时我们可以为断点设置触发它的条件,使它满足指定条件时才触发。
恋喵大鲤鱼
2018/08/03
1.4K0
VS2012使用条件断点和内存断点
点击加载更多

相似问题

秒表报告的时间不正确

20

JavaScript中的秒表-输出不正确

228

响应断点不正确

13

如何为多个秒表时间重置秒表?

15

列的秒表

115
交个朋友
加入腾讯云官网粉丝站
蹲全网底价单品 享第一手活动信息
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档