Я создал служебный класс в C ++, чтобы иметь возможность получать время выполнения различных методов. Я пытаюсь сохранить время, рассчитанное с использованием хронографа, в структуре, чтобы я мог сохранить все методы, которые я использую в программе, для измерения и печати в конце. Проблема в том, что большую часть времени, когда я вызываю это из другого кода, он возвращает 0 в качестве вывода, но если я использую chrono.now для непосредственного вычисления истекшего времени в основной функции, он дает фактический результат.
Ниже описано, как я создал методы в файле c ++ для сбора времени из разных функций (заголовок и cpp разные, но я объявил struct непосредственно в файле cpp):
Объявление структуры иинициализация:
struct analysis{
const char * func_name;
int calc_time;
analysis(const char* x, const int y):
func_name(x), calc_time(y){}
};
vector<analysis> time_coll {};
метод для начала сохранения времени:
void Utility::tStart(){
auto chrono_strt = chrono::high_resolution_clock::now();
sink = chrono_strt;
}
метод для сохранения времени окончания:
void Utility::tEnd(const char* func_name){
std::chrono::high_resolution_clock::time_point chrono_stp = chrono::high_resolution_clock::now();
std::chrono::microseconds elapsed = std::chrono::duration_cast<std::chrono::microseconds>(chrono_stp - sink);
time_coll.push_back((analysis(func_name, elapsed.count())));
}
метод для печати времени в конце:
void Utility::pStat(){
for( const auto& elem: time_coll){
cout << elem.func_name << " : " << elem.calc_time << endl;
}
}
Пример использования в другом методе:
void Sort::BubbleSort(vector<int>& a){
u.tStart();
int temp;
for (int i=0; i<=(a.size());i++){
for(int j=0; j<=(a.size())-2;j++){
if(a[j]>a[j+1]){
temp = a[j];
a[j] = a[j+1];
a[j+1] = temp;
}
}
}
u.tEnd(__FUNCTION__);
}
Вышеуказанные методы в основном дают 0 в качестве результата, за исключением того, что я даю чрезвычайно большой вклад в проверяемую функцию (я проверял ее)на пузырьковую сортировку). Когда я вызываю хроно в главном файле от начала до конца (без использования вышеупомянутых методов), я получаю правильный результат.