Я много занимался поиском и нашел похожие вопросы, но до сих пор не могу понять, почему иногда мой код получает правильное время, а в других случаях решает стать бесполезным и возвращать повторяющиеся значения.
Простой код C ++, который вы можете запустить, чтобы проверить это:
#include <iostream>
#include <chrono>
#include <windows.h>
//#include <unistd.h> //For Unix
void stall(int milisseconds){
auto start = std::chrono::high_resolution_clock::now();
Sleep(milisseconds);
//usleep(milisseconds*1000); //For Unix
auto finish = std::chrono::high_resolution_clock::now();
std::cout<<std::chrono::duration_cast<std::chrono::nanoseconds>(finish-start).count()/1000000.0<<" ms\n";
}
int main(){
std::cout<<"Begin\n";
for (int i = 1; i < 100; i++){
stall(i);
}
}
При выполнении этого ожидаемый результат будет выглядеть примерно так:
1 ms
2 ms
3 ms
4 ms
...
98 ms
99 ms
100 ms
Иногда это работает,но в других случаях (например, наугад) выходные данные выглядят так:
15.625 ms
15.62 ms
15.632 ms
7.997 ms
16.713 ms
15.637 ms
31.25 ms
31.263 ms
31.245 ms
31.25 ms
21.985 ms
...
93.718 ms
93.77 ms
93.744 ms
102.263 ms
109.369 ms
96.192 ms
109.367 ms
109.368 ms
Как я могу устранить это ужасное несоответствие?Сокращение числа фоновых процессов, похоже, не имеет никакого эффекта.