Ás vezes precisamos devolver algo ao sistema quando finalizamos um programa, mas pode ser que o usuário matou o processo antes do fim do mesmo sem ser de uma maneira esperada.
Acontece muito em programas que possuem um loopwhile com tarefas a serem executadas para o final esperado!
Suponhamos que vc possua esse código que emite um aviso no início do programa e após 5 segundos o programa termina e emite outro aviso:
Após você compilar e rodar, após 5 segundos apareceram essas duas mensagens na saída:
Agora suponhamos que antes do fim dos 5 segundos, você pressione Ctrl + c, a segunda mensagem não aparecerá e a saída ficará assim:
Ou seja, se seu programa tem uma função para ser executada sempre que o programa terminar, logo, ele gerará um bug silencioso.
Para resolver isso, podemos mapear o sinal enviado e executar determinada tarefa mesmo que o programa seja interrompido antes do seu fim esperado de forma comum.
Utilizando o std::signal
Primeiramente vamos incluir o cabeçalho:
Criar uma função de callback que tratará o signal, fora da execução da nossa classe:
E startar ele no construtor, ou antes do início de um suposto loop que executaremos!
O código final será:
Após compilar e rodar, após teclar Ctrl + c, agora a saída será:
Note que após o Ctrl + c(^C) a mensagem apareceu normalmente!
Outro exemplo sem Orientação a Objetos e com while
Após cadastro e confirmação do e-mail, enviaremos semanalmente resumos e também sempre que houver novidades por aqui para que você mantenha-se atualizado!