Domanda

Ho eseguito un programma di test di console Visual C ++ all'interno della build giornaliera. Ogni tanto il test avrebbe chiamato qualche funzione che è stato cambiato da altri sviluppatori in modo improprio, si scende in un ciclo infinito e appendere quindi bloccando l'accumulo.

Ho bisogno di una soluzione di cane da guardia più semplice possibile. Ecco quello che mi è venuta. Nel punto di ingresso programma di test mi metto un thread separato che loop tempo continuo e controlli trascorso. In caso di superamento certo periodo predefinito chiama TerminateProcess (). Pseudocodice:

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

E 'questa soluzione peggio di un cane da guardia implementato come un programma di master separata?

È stato utile?

Soluzione

Credo che sia preferibile implementare il cane da guardia come un processo separato. E 'più facile riutilizzare ad esso, è più facile per rilevare se la vostra applicazione è caduto e per ottenere il suo codice di ritorno.

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top