Watchdog costruito nello stesso processo come il programma controlla
-
21-09-2019 - |
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?
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.