0

デイリービルド内でVisualC++コンソールテストプログラムを実行します。時々、テストは他の開発者によって不適切に変更された関数を呼び出し、無限ループに陥ってハングし、ビルドをブロックします。

できるだけシンプルなウォッチドッグソリューションが必要です。これが私が思いついたものです。テストプログラムのエントリポイントで、継続的にループし、経過時間をチェックする別のスレッドを開始します。事前定義された期間を超えると、TerminateProcess()が呼び出されます。擬似コード:

DWORD WatchDog( LPVOID)
{
     DWORD start = GetTickCount();
     while( true ) {
        Sleep( ReasonablePeriod );
        if( GetTickCount() - start > MaxAllowed ) {
            TerminateProcess( GetCurrentProcess(), 0 );
        }
     }
     return 0;
}

このソリューションは、別のマスタープログラムとして実装されたウォッチドッグよりも悪いですか?

4

1 に答える 1

1

ウォッチドッグを別のプロセスとして実装することが望ましいと思います。再利用が簡単で、アプリがクラッシュしたかどうかを検出して、そのリターンコードを取得するのも簡単です。

于 2010-01-02T06:01:49.593 に答える