Поэтому я пытался экспериментально определить (средний) интервал времени на моей ОС Linux 4.4.0-98, учитывая подсказку отсюда. Ниже приведен мой код с использованием C ++ 14 STL.
#include <chrono>
#include <iostream>
#include <unistd.h>
int main(int argc, char** argv) {
std::chrono::time_point<std::chrono::high_resolution_clock> clock_t1 = std::chrono::high_resolution_clock::now();
std::chrono::time_point<std::chrono::high_resolution_clock> clock_t2 = std::chrono::high_resolution_clock::now();
std::chrono::duration<long long, std::nano> diff = clock_t2 - clock_t1;
std::chrono::duration<long long, std::nano> diff_precision = std::chrono::nanoseconds(1LL);
for(int i=0; i<5; i++) {
if(0 == fork()) {
break;
}
}
int num_tries = 0;
while(num_tries < 10) {
while((diff = clock_t2 - clock_t1) <= diff_precision) {
clock_t1 = clock_t2;
clock_t2 = std::chrono::high_resolution_clock::now();
}
std::cout << diff.count() << std::endl;
clock_t1 = std::chrono::high_resolution_clock::now();
clock_t2 = std::chrono::high_resolution_clock::now();
num_tries++;
}
return 0;
}
Проблема в том, что я всегда получаю одинаковые номера для всех процессов. например выход:
480
480
480
480
480
480
Кроме того, казалось странным, что временной интервал составляет около половины микросекунды. Поэтому я попробовал разные значения для diff_precision
прямо от 1 нс до 100 мс. И для различной точности он дал выход в этом диапазоне; например, для точности 1 мс, это вывело бы кучу 5531380
, Странно действительно.
Это даже надежный метод для определения временного интервала ОС? Или я должен просто доверять значениям из исходный код?
П.С .: «Вопрос с таким названием уже существует; пожалуйста, будьте более конкретны ».
Задача ещё не решена.
Других решений пока нет …