あなたは<chrono>
ヘッダを使用して簡単なタイマークラスを作成することができます。このような何か:
class Timer
{
public:
using clock = std::chrono::steady_clock;
void clear() { start(); tse = tsb; }
void start() { tsb = std::chrono::steady_clock::now(); }
void stop() { tse = std::chrono::steady_clock::now(); }
auto nsecs() const
{
using namespace std::chrono;
return duration_cast<nanoseconds>(tse - tsb).count();
}
double usecs() const { return double(nsecs())/1000.0; }
double msecs() const { return double(nsecs())/1000000.0; }
double secs() const { return double(nsecs())/1000000000.0; }
friend std::ostream& operator<<(std::ostream& o, Timer const& timer)
{
return o << timer.secs();
}
private:
clock::time_point tsb;
clock::time_point tse;
};
あなたは、単にこのようにそれを使用することができます:
Timer timer;
timer.start();
// do some stuff
std::this_thread::sleep_for(std::chrono::milliseconds(600));
timer.stop();
std::cout << timer << " seconds" << '\n';
EDIT:<chrono>
が利用できない場合は、clock_gettime()
を使用することができますPOSIX
システムで:
class Timer
{
public:
void clear() { start(); tse = tsb; }
void start() { clock_gettime(CLOCK_MONOTONIC, &tsb); }
void stop() { clock_gettime(CLOCK_MONOTONIC, &tse); }
long nsecs() const
{
long b = (tsb.tv_sec * 1000000000) + tsb.tv_nsec;
long e = (tse.tv_sec * 1000000000) + tse.tv_nsec;
return e - b;
}
double usecs() const { return double(nsecs())/1000.0; }
double msecs() const { return double(nsecs())/1000000.0; }
double secs() const { return double(nsecs())/1000000000.0; }
friend std::ostream& operator<<(std::ostream& o, Timer const& timer)
{
return o << timer.secs();
}
private:
timespec tsb;
timespec tse;
};
タイマーを定義してから、関数を実行する前後の時間を取得する必要があります。違いは、あなたの経過時間です。 – turoni
Valentin、まだZedboardのZynq SoCのARM側(PS)ですか?他のARM Cortex-A9やその他のARMv7エポックのARM Cortex-Aと同様に動作するはずです。コンパイラとそのバージョン(コードをクロスコンパイルするために使用するザイリンクスツールのバージョン、コードをどのようにコンパイルしたか)を教えてください。 – osgx
@osgx私はSDカードにインストールされたLinaro UbuntuでZedboardブートを作ったので、私はARMの部分ではなくFPGA部分で作業していると思います。 Makefileに 'g ++ -4.6'を使ってTerminalでコンパイルします。 –