我的电脑进入睡眠状态时C#秒表会暂停吗?

时间:2016-02-16 15:02:47

标签: c# sleep stopwatch

我用秒表测量程序的运行时间(用C#编写)。我的电脑睡了,我不知道它显示的时间数据是否正确。那么Stopwatch是否也会测量睡眠时间,或者是暂停,然后继续?

2 个答案:

答案 0 :(得分:7)

根据source code for StopWatch,方法Start如下所示:

public void Start() {
    // Calling start on a running Stopwatch is a no-op.
    if(!isRunning) {
        startTimeStamp = GetTimestamp();                 
        isRunning = true;
    }
}

方法Stop如下所示:

public void Stop() {
    // Calling stop on a stopped Stopwatch is a no-op.
    if( isRunning) {
        long endTimeStamp = GetTimestamp();                 
        long elapsedThisPeriod = endTimeStamp - startTimeStamp;
        elapsed += elapsedThisPeriod;
        isRunning = false;

        if (elapsed < 0) {
            // When measuring small time periods the StopWatch.Elapsed* 
            // properties can return negative values.  This is due to 
            // bugs in the basic input/output system (BIOS) or the hardware
            // abstraction layer (HAL) on machines with variable-speed CPUs
            // (e.g. Intel SpeedStep).

            elapsed = 0;
        }
    }
}

所以你的问题的答案是:它通过使用两个时间戳来衡量持续时间,从而得出结论:你的计算机是否进入睡眠并不重要。

更新(感谢Mike和Joe): 但是,如果您的计算机处于休眠状态,则无法运行您的程序 - 因此测量的持续时间将是程序运行的持续时间与计算机休眠的持续时间之和。 TotalDuration = CalculationDuration + SleepDuration

答案 1 :(得分:4)

计算机进入睡眠状态时,秒表不会暂停。

它使用Windows API QueryPerformanceCounter()函数,当计算机进入睡眠状态时does not reset the count

  

&#34; QueryPerformanceCounter读取性能计数器并返回   自Windows运行以来发生的滴答总数   系统启动,包括机器处于睡眠状态的时间   状态,如待机,休眠或连接待机。&#34;