Quindi lavoro su un progetto e voglio profilare il mio codice. Ho usato KCachegrind per avere un'idea generale di quali funzioni costano di più. Ma ora voglio ottenere il tempo esatto trascorso su quelle particolari funzioni. Così ho deciso di misurarli manualmente usando clock_gettime
usando l'approccio orientato agli oggetti. vale a dire. funzione wrap clock_gettime
all'interno di una classe.
Diciamo che voglio creare una classe che gestisca la misurazione del tempo
class measure_time{
inline int start(){...}; // return ts_start
inline int end(){...}; // return ts_end
};
Quindi uso questa classe per misurare il tempo attraverso i progetti. Quando sto per misurare devo creare istanza di measure_time per ogni classe del mio progetto. cioè: Diciamo che ho classe A, classe B, classe C ecc nel mio progetto.
// A.h
class A{
void f();
void f_1();
measure_time mt;
}
// A.cpp
void A::f(){
// does some work
}
void A::f_1(){
// measure time start
s = mt.start();
f()
// measure time end
e = mt.end();
//record time
time = s-e;
}
// B.h
class B{
void g();
void g_1();
measure_time mt;
}
// B.cpp
void B::g(){
// does some work
}
void B::g_1(){
// measure time start
s = mt.start();
g()
// measure time end
e = mt.end();
//record time
time = s-e;
}
// C.h
class C{
void h();
void h_1();
measure_time mt;
}
//C.cpp
void C::h(){
// does some work
}
void C::h_1(){
// measure time start
s = mt.start();
h()
// measure time end
e = mt.end();
//record time
time = s-e;
}
Con questo approccio devo definire la classe 'measure_time' in ciascuna classe. Quindi quello che volevo era definire la classe measure_time una sola volta e usarla attraverso la classe A, B e C.