Se capisco bene, intendi attuare una strategia di ripristino degli errori che chiude l'interfaccia utente se qualcosa va storto e rilanciala, sperando in un risultato migliore.
Un simile approccio anti-truffa potrebbe essere molto efficace se l'interfaccia utente fosse in un processo indipendente. Terminare la procedura utilizzando TerminateProcess() sarebbe quindi lascia che il SO pulisca il disordine e rilasci le risorse anche nelle situazioni più avverse. Questo ti permetterebbe di ricominciare, sperando che l'errore non si riproduca troppo presto.
Sfortunatamente il tuo progetto sembra basato su un provider UI in una DLL. Ciò significherebbe che l'interfaccia utente MFC viene eseguita nello stesso processo dell'applicazione e nello stesso spazio indirizzo. Quindi se l'interfaccia utente svuota qualcosa, puoi provare a terminarlo e riavviarlo, ma non hai garanzie sul corretto rilascio di tutte le risorse e tornare a una situazione stabile:
- se l'MFC viene eseguito è un thread distinto, puoi eliminarlo se come spiegato qui . Ciò potrebbe portare a risultati soddisfacenti, ad esempio se il thread sarebbe bloccato in un ciclo infinito o così. Ma questo approccio non funzionerebbe se il thread potesse corrompere la memoria.
- potresti anche chiudere l'interfaccia utente chiamando le funzioni di chiusura come spiegato qui o, meglio, inviando un messaggio WM_CLOSE come spiegato qui , che dovrebbe causare all'interfaccia utente di terminare il suo ciclo di eventi. Ancora una volta, questo approccio non funzionerebbe se l'interfaccia utente corrompesse la memoria o se trapelasse risorse come pennelli o altre risorse critiche di windows32.
Come vedi, nel tuo contesto questa strategia di recupero ha solo vantaggi limitati. Se hai un bug che blocca la tua interfaccia utente di tanto in tanto, ci sono possibilità che qualche memoria venga corrotta da qualche parte. Inoltre, tale ripristino degli errori è solo un modo per aggirare il problema. L'utente che sta vivendo questo tipo di riavvio sarebbe certamente felice se succedesse una volta all'anno, ma perderebbe rapidamente la fiducia se fosse ogni giorno.
Non ti sbagli nel tuo approccio, cercando di minimizzare gli effetti del bug, ma il tuo collega non ha torto, quando si aspetterebbe che il bug venga eliminato. personalmente, vorrei investire prima in quest'ultimo.