Pergunta

Eu sobrecarregado os 6 sinais listados neste site http: // www. cplusplus.com/reference/clibrary/csignal/signal.html

Então eu corri meu aplicativo (duplo clique não percorreu IDE) e tentou 1) tarefa final 2) X em topright e processo de matar 3). Eu esperava que os dois primeiros a causar algum tipo de sinal (i estou no XP), mas infelizmente eu não tenho nada. Que não estou autorizado a arquivos abertos para escrever em quando um sinal ocorre? i estou supondo que eu sou (SIGSEGV permitiu-me).

Quando o Firefox trava ou quando eu matá-lo, ele se lembra do que páginas eu estava. Será que o registro de toda endereço i clique uma página ou fá-lo fazer isso em um sinal / crash?

minha principal questão é o sinal de que eu possa usar para o processo de captura matar

Foi útil?

Solução

Win32 não fornece uma opção para interceptar o seu programa ser morto com TerminateProcess (que é o que vai acontecer quando "End Task" do Gerenciador de tarefas ou clique no [X]).

Você pode pegar o sinal SIGSEGV porque a biblioteca C runtime fornece uma emulação deste sinal quando executado no Windows. Quando o programa faz com que uma violação de acesso do Windows (exceção 0xC0000005), a biblioteca de tempo de execução tem a opção de pegar isso e simular um SIGSEGV estilo Unix para você. Esta é, no entanto, não é a melhor maneira de lidar com tal exceção. Se você estiver escrevendo um programa Win32, você geralmente não devem tentar usar serviços de estilo Unix.

Outras dicas

Você pode pegar erro de execução como uma violação de acesso se você substituir o SetUnhandledExceptionFilter manipulador de exceção padrão chamando (esta é uma função win32 e, como tal, não depende de emulação de biblioteca C). Este é o método pode ser usado para fornecer "minidumps" quando um programa falha.

Mas este manipulador de exceção não será chamado quando você normalmente perto a sua aplicação, ou quando o aplicativo for fechado do Gerenciador de tarefas. Nas últimas janelas de caso é chamar TerminateProcess, não é um desligamento normal, mas ele está forçando seu programa para terminar.

Eu não estou ciente de que é a implementação usada pelo Firefox, mas para salvar as abas atuais abrir é provável que tenha um temporizador em execução, e cada vez que é executá-lo salvar o histórico para um arquivo e algum tipo de sujo marca.

Outras soluções mais complexas para detectar quando um programa é fechado (implementado por programas antivírus e semelhantes) é ter dois programas não relacionados em execução, cada verificação de que o outro ainda está em execução, e se detectar o outro foi fechado o prazo, novamente.

aplicativos

Windows são aplicações de console ou aplicativos GUI. aplicações de console tendem a ficar WM_CLOSE, consola de aplicativos CTRL_CLOSE_EVENT. Nem são sinais; nem seria enviado se o seu aplicativo é encerrado via TerminateProcess ().

Se você deseja armazenar onde você estava, use um arquivo de memória mapeada e atualização que em cada ação. Quando seus sai do processo, a página sujo na memória é escrito de volta ao processo pela OS, possivelmente, em outros momentos também. Esta solução permite que o sistema operacional para gerenciar o disco I / O para você, e está em uma posição melhor para fazê-lo.

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