Я хотел бы узнать, сколько времени занимает функция C++ в миллисекундах.Время функции в C++
Вот что у меня есть:
#include<iostream>
#include<chrono>
using timepoint = std::chrono::steady_clock::time_point;
float elapsed_time[100];
// Run function and count time
for(int k=0;k<100;k++) {
// Start timer
const timepoint clock_start = chrono::system_clock::now();
// Run Function
Recursive_Foo();
// Stop timer
const timepoint clock_stop = chrono::system_clock::now();
// Calculate time in milliseconds
chrono::duration<double,std::milli> timetaken = clock_stop - clock_start;
elapsed_time[k] = timetaken.count();
}
for(int l=0;l<100;l++) {
cout<<"Array: "<<l<<" Time: "<<elapsed_time[l]<<" ms"<<endl;
}
компилируется, но я думаю, что многопоточность мешает ему правильно работать. Выход производит раз в неравные промежутки времени, например .:
Array: 0 Time: 0 ms
Array: 1 Time: 0 ms
Array: 2 Time: 15.6 ms
Array: 3 Time: 0 ms
Array: 4 Time: 0 ms
Array: 5 Time: 0 ms
Array: 6 Time: 15.6 ms
Array: 7 Time: 0 ms
Array: 8 Time: 0 ms
мне нужно использовать какой-то замок мьютекса ли? Или существует более простой способ подсчета времени, сколько миллисекунд для выполнения функции?
EDIT
Может быть, люди предполагают, используя high_resolution_clock
или steady_clock
, но все три дают одинаковые результаты нерегулярные.
Это решение, по-видимому, дает реальные результаты: How to use QueryPerformanceCounter?, но мне непонятно почему. Кроме того, https://gamedev.stackexchange.com/questions/26759/best-way-to-get-elapsed-time-in-miliseconds-in-windows работает хорошо. Кажется, это проблема с реализацией Windows.
Попробуйте 'steady_clock' или' high_resolution_clock' вместо этого. Степень детализации 'system_clock' может быть недостаточной. – Rostislav
Да, я пробовал все 3 одинаковых результата. Я предполагаю, что это проблема многопоточности, хотя трудно указать точку. Я также пробовал передать time_point функции и когда функция заканчивается, возвращая разницу, но это тоже не работает. – OrdinaryHuman
@OrdinaryHuman Возможно, это как работает ваша функция? Вы пытались измерить сон? ех. 'std :: this_thread :: sleep_for (std :: chrono :: milliseconds (15000));' – marcinj