Watchdog incorporado no mesmo processo que o programa que controla
-
21-09-2019 - |
Pergunta
Eu executo um programa visual de teste de console C ++ dentro da construção diária. De vez em quando, o teste chamaria alguma função que foi alterada por outros desenvolvedores de forma inadequada, desceria para um loop infinito e pendurou assim bloqueando a construção.
Preciso de uma solução de vigilância o mais simples possível. Aqui está o que eu inventei. No ponto de entrada do programa de teste, inicio um encadeamento separado que atinge continuamente e verifica o tempo decorrido. Se algum período predefinido for excedido, ele chama TerminEProcess (). Pseudo-código:
DWORD WatchDog( LPVOID)
{
DWORD start = GetTickCount();
while( true ) {
Sleep( ReasonablePeriod );
if( GetTickCount() - start > MaxAllowed ) {
TerminateProcess( GetCurrentProcess(), 0 );
}
}
return 0;
}
Esta solução é pior do que um cão de guarda implementado como um programa mestre separado?
Solução
Eu acho que é preferível implementar o cão de guarda como um processo separado. É mais fácil reutilizá-lo, é mais fácil detectar se o seu aplicativo travou e obter seu código de retorno.