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?

Foi útil?

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.

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top