Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/314.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 当我的电脑进入睡眠状态时,秒表会暂停吗?_C#_Sleep_Stopwatch - Fatal编程技术网

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

C# 当我的电脑进入睡眠状态时,秒表会暂停吗?,c#,sleep,stopwatch,C#,Sleep,Stopwatch,我正在用秒表测量我的程序(用C#编写)的运行时间。我的电脑进入睡眠状态,我不知道它显示的时间数据是否正确。那么,秒表是不是也在测量睡眠时间,还是暂停后继续测量睡眠时间?根据方法Start如下所示: public void Start() { // Calling start on a running Stopwatch is a no-op. if(!isRunning) { startTimeStamp = GetTimestamp();

我正在用秒表测量我的程序(用C#编写)的运行时间。我的电脑进入睡眠状态,我不知道它显示的时间数据是否正确。那么,秒表是不是也在测量睡眠时间,还是暂停后继续测量睡眠时间?

根据方法
Start
如下所示:

public void Start() {
    // Calling start on a running Stopwatch is a no-op.
    if(!isRunning) {
        startTimeStamp = GetTimestamp();                 
        isRunning = true;
    }
}
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;
        }
    }
}
方法
Stop
如下所示:

public void Start() {
    // Calling start on a running Stopwatch is a no-op.
    if(!isRunning) {
        startTimeStamp = GetTimestamp();                 
        isRunning = true;
    }
}
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;
        }
    }
}
公共作废停止(){
//在停止的秒表上叫停是不可行的。
如果(正在运行){
long-endTimeStamp=GetTimestamp();
long elapsedThisPeriod=结束时间戳-开始时间戳;
已用+=已用此时间段;
isRunning=false;
如果(经过<0){
//测量小时间段时,秒表经过*
//属性可以返回负值。这是由于
//基本输入/输出系统(BIOS)或硬件中的错误
//具有变速CPU的机器上的抽象层(HAL)
//(例如英特尔SpeedStep)。
经过=0;
}
}
}
因此,您的问题的答案是:它通过使用两个时间戳来测量持续时间,从而得出结论:计算机是否进入睡眠状态无关紧要

更新(感谢迈克和乔): 但是,如果您的计算机正在睡眠,它将无法运行您的程序-因此测量的持续时间将是程序运行的持续时间和计算机睡眠的持续时间之和。
TotalDuration=CalculationDuration+SleepDuration

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

它使用Windows API函数,当计算机进入睡眠状态时:

“QueryPerformanceCounter读取性能计数器并返回 自Windows操作系统启动以来发生的勾号总数 系统已启动,包括机器处于睡眠状态的时间 状态,如待机、休眠或已连接待机。“


运行测试。试试看。为什么不在受控条件下试试呢?
Stopwatch
在启动和停止时调用一个方法
GetTimestamp()
。然后减去两个时间戳。@Joe跑步需要几个小时,如果没有必要,我不想再开始跑步,这就是我在这里问的原因。很难想象秒表会启动一个单独的线程来“计算”时间。。。正如其他用户所建议的,当它启动和停止时只需要时间戳,这很重要,因为测试在计算机睡眠时没有运行,因为秒表将占去所有时间。如果秒表显示完成测试需要12个小时,而电脑却睡了4个小时,那么测试实际上只需要8个小时。@mike。。。我不明白你在说什么。“我想你需要重新考虑你的评论。”乔,我是从OP的角度考虑的。不,计算机进入睡眠状态不会影响秒表经过的时间,但会影响测试结果。
StopWatch
将指示即使在电脑处于睡眠状态时所经过的总时间,而实际上,测试从未在整个时间内运行。因此,
秒表
时间与测试所用时间无关。@mike。。。哦,明白了。感谢您的澄清更新了答案;-)亲爱的投票人:想解释一下这个答案的错误吗?据我所知,它事实上是正确的,因此发现它的错误将是最有启发性的。我也不理解否决票。这个答案比公认的答案对我更有帮助+1以平衡BS。