OS를 예상보다 더 오래 잔다. 나는 100 번 반복하여 총 수면 시간이 100 대신에 1500ms였습니다.WinAPI를 수면() 함수를 호출
이 일반적인 행동입니까, 아니면 내 MOBO, CPU, Windows 설치와 관련해서 뭔가 잘못된 점에 대해 협의해야합니까?
편집 : 가능한 경우이 코드를 실행하고 잠자기 시간이 얼마나 남았는지 게시 할 수 있습니다. 나는 내 친구가 이걸 돌릴 수있게 해줬고 실제로 1ms가 넘었다.
#include <iostream>
#include <ctime>
#include <Windows.h>
void test(void)
{
std::cout << "Testing 1ms sleep." << std::endl;
for (unsigned int i = 0; i < 10; i++)
{
std::clock_t startClocks = std::clock();
Sleep(1);
std::clock_t clocksTaken = std::clock() - startClocks;
std::cout << "Time: " << clocksTaken << "ms." << std::endl;
}
}
int main(void)
{
test();
std::cin.sync();
std::cin.get();
return 0;
}
EDIT2 : 어떤 사람들은이 1ms를 얻고있는 이유는 다른 프로그램이 1ms에 시스템 전체의 타이머 해상도를 설정하는 실행되는 것 같다. 기본적으로 이것은 Windows 7에서 15.6ms가되어야합니다.
에서 찾을 수있다 (하드웨어/os, 그 시간에 프로세서의 부하 등) 나는 당신이 사람들에게 그 코드를 실행하도록 요청함으로써 성취하고자하는 것이 무엇인지 확신하지 못한다. 루프가 반복 될 때마다 루프가 실행될 때마다 다른 시간을 출력하는 것이 가능할 것입니다. – obmarg
Sleep()은 Windows에서 하드웨어와 관련이 없다고 생각합니다. timeBeginPeriod()를 사용하는 프로그램을 실행하지 않으면 결과는 15-16ms가되어야합니다. 예 : Windows Media Player에서 10ms로 설정하고 BSPlayer에서 1ms로 설정합니다. 또한 일부 브라우저에서는이를 조정한다고합니다. – NFRCR
아마 직접 연결되어 있지는 않지만 간접적 인 링크가있을 수 있습니다. 매우 낮은 전력이 공급되는 컴퓨터에서 창문을 달리는 경우로드가 올라가고 수면 복귀가 오기도 전에 시간이 걸릴 수 있습니다. – obmarg