何かが統計カウンタのようなものを使用しています。まず、/()/のGetTickCount()の例のクロックのために...もちろん最高ですすべてのあなたが持っているタイマー...細かい粒度と低オーバーヘッドを使用した後、10
int timecounters[10];
言う...あなたが必要とするどのように多くのカウンタを定義しますQueryPerformanceCounter/rdtsc。 1
struct StopWatch
{
int n;
StopWatch(int n) : n(n) { timecounters[n] -= timer(); }
~StopWatch() { timecounters[n] += timer(); }
};
以下、あなたはプログラムの実行の終了時
{
StopWatch sw(1);
// code to be instrumented
}
を書くトレースする必要があるコードのすべてのセクションのためにあなたは合計時間を持っていますよう は、最後にストップウォッチクラスを使用します様々な計装されたセクションで費やされ、オーバーヘッドは非常に低くなるはずです。これは、例えば、単一の実行時間の制限チェック...を追加することも簡単です。もちろん
struct WatchDog
{
int n, limit, start;
WatchDog(int n, int limit) : n(n), limit(limit)
{
start = timer();
}
~WatchDog()
{
int delta = timer() - start;
if (delta > limit)
{
log("WatchDog(%i): Time limit exceeded (%i > %i)",
n, delta, limit);
}
timecounters[n] += delta;
}
};
それはもはやそれは...それだけ報告します必要以上かかる場合WatchDog
クラスは活動を中断することはありません問題の終わりに。本当の中断の一般的なウォッチドッグクラスは実装する方がはるかに複雑です。
Windows用ですか? WaitForSingleObject()を使用していますか? Jaywalker氏が指摘したように – Jaywalker
では、この質問はOSに関連しているので、これを指定する必要があります。 – Simone
@ Jaywalker&Simone - それはSolarisプラットフォーム上にあります。 Sun Sparc 32Gig RAM(8コア搭載)それはコンテキストの切り替えの多くを持って... – Naveen