- mongodb - 在 MongoDB mapreduce 中,如何展平值对象?
- javascript - 对象传播与 Object.assign
- html - 输入类型 ="submit"Vs 按钮标签它们可以互换吗?
- sql - 使用 MongoDB 而不是 MS SQL Server 的优缺点
如果一个线程正在做这样的事情:
const DWORD interval = 20000;
DWORD ticks = GetTickCount();
while(true)
{
DoTasksThatTakeVariableTime();
if( GetTickCount() - ticks > interval )
{
DoIntervalTasks();
ticks = GetTickCount();
}
}
最终,当值不适合 DWORD 时,滴答声将自动换行。
我一直在和一位同事讨论这个问题。我们中的一个人认为,当换行发生时,代码仍然会表现得“很好”,因为减法运算也会换行。我们中的另一个人认为它并不总是有效,尤其是在间隔很大的情况下。
谁是对的,为什么?
谢谢。
最佳答案
来自 the docs :
The elapsed time is stored as a DWORD value. Therefore, the time will wrap around to zero if the system is run continuously for 49.7 days. To avoid this problem, use GetTickCount64. Otherwise, check for an overflow condition when comparing times.
但是,DWORD 是无符号的 - 所以你应该没问题。 0 - “非常大的数字” = “小数字”(当然,假设您没有任何溢出检查事件)。我之前的编辑建议你得到一个负数,但那是在我考虑到 DWORD 未签名之前。
如果手术需要不到 49.7 天,您仍然会遇到问题。这对你来说可能不是问题;)
一种测试方法是将 GetTickCount()
方法 stub ,这样您就可以编写单元测试,明确地将其包装起来。再说一次,如果你真的只是怀疑算术部分,你可以很容易地为此编写单元测试:) 真的,只要你知道它的行为,这个数字来自系统时钟的事实几乎是无关紧要的wraps - 并且在文档中指定。
关于c++ - GetTickCount() 换行时会发生什么?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/727918/
为了澄清,我的意思是系统挂起/休眠时花费的时间,而不是调用线程(GetTickCount() 返回自系统启动以来的毫秒数)。 最佳答案 据我所知,GetTickCount与线程无关,它统计的是系统启动
我想知道 Windows API GetTickCount() 的作用是什么?实际测量?它是否测量从按下系统电源按钮的那一刻起的时间?它是否也测量引导加载程序或 BIOS 加载所需的时间?我正在尝试测
在 question 的答案处在 Stack 和本书中 here on page 52我发现用于测量执行时间的普通 getTickCount getTickFrequency 组合给出的时间以毫秒为单
我有一个关于 GetTickCount 函数的问题,我在我的代码中有两次调用这个函数,它们之间有几个命令,并且两个调用中的函数返回相同的计数。即 var1 = GetTickCount(); code
如果一个线程正在做这样的事情: const DWORD interval = 20000; DWORD ticks = GetTickCount(); while(true) { DoTask
我一直在重构一些 header 包含,突然间我留下了这个(更改了一些命名空间和类名)链接错误: Error 1 error LNK2001: unresolved external symbol "p
这个问题不太可能帮助任何 future 的访问者;它只与一个小的地理区域、一个特定的时间点或一个非常狭窄的情况相关,这些情况并不普遍适用于互联网的全局受众。为了帮助使这个问题更广泛地适用,visit
实际上,更具体地说,我想获取触发 IRQ 的时间。我习惯使用 GetTickCount,我想知道在 linux 内核模块中可以使用什么时间机制。 最佳答案 Linux 内核中有一个jiffies 变量
我试图通过 PHP COM 扩展从 KERNEL32.DLL 执行 GetTickCount 但没有成功。我应该使用什么 ProgID 或类 ID 来执行 GetTickCount? $com = n
我正在尝试进行一些测试,它要求 Windows 系统在特定操作发生之前启动并实时运行 15 分钟。然而,这非常耗时,必须等待 15 分钟的实时时间。 有没有办法改变 GetTickCount() 返回
我正在 Delphi 中使用多设备,并且正在构建一个 Android 应用程序。我需要使用在 Windows 中声明的 GetTickCount 。 它是否存在于 firemonkey 中的某个地方,
您好,当我的应用程序启动时,我加载一个函数 - 调用一个名为 CreateFileNow() 的函数{} 我想循环,但不知道怎么做。我想每15秒写入一次数据。因此,我在应用程序启动时调用该函数,将数据
我正在尝试通过 Windows 计算机上的 Python 计算出当前用户大约空闲了多长时间(例如 this question )。 为此,我想我需要比较 GetLastInputInfo 的结果结果是
我不太擅长 C++,更擅长 C# 和 PHP。我被分配了一个项目,要求我使用 GetTickCount 并挂接到应用程序。我需要一些帮助,因为某些原因它没有按计划工作......这是 Hook 的代码
我正在寻找等同于 GetTickCount() 的内容在 Linux 上。 目前我正在使用 Python 的 time.time()这大概会调用 gettimeofday() .我担心的是返回的时间(
根据 MSDN只有当系统没有连续运行 49.7 天时,GetTickCount API 才返回系统运行时间。如果它运行超过那个,它将返回 0。 有没有人遇到过此 API 在运行时间超过 49.7 天的
我正在寻找与 GetTickCount() 等效的版本在 Linux 上。 目前我正在使用 Python 的 time.time()大概是调用到 gettimeofday() .我担心的是,如果时钟被
我试图在一段非常大的代码中分别使用 GetTickCount() 对多个函数进行计时,以找出瓶颈的确切位置。我可以成功地为整段代码计时。我正在努力解决的问题是我在哪里添加计时功能来测量每个单独功能的时
这是我在 visual studio 2010 中的代码的一部分。但是我从编译器中得到“IntelliSense:标识符“GetTickCount”未定义”。我不知道如何解决它。 typedef en
我正在尝试使用 Windows API 中的 GetTickCount() 来获取系统正常运行时间。我想知道系统运行了多长时间。 但是 GetTickCount 的返回高得离谱。此代码使我的正常运行时
我是一名优秀的程序员,十分优秀!