Domanda

Abbiamo un'applicazione che utilizza diversi oggetti COM per vari compiti. Se l'utente dice a Windows di spegnere mentre la nostra applicazione è in esecuzione, invia tutte le applicazioni (Windows di livello superiore) una notifica di spegnimento, ma gli oggetti OOP COM possono spegnere prima che il genitore venga avvisato e ha la possibilità di spegnere in modo pulito, causando vari errori in diversi componenti.

Ciò è peggiorato poiché uno degli oggetti OOP è stato creato per ospitare un oggetto instabile di terze parti, quindi viene automaticamente riavviato quando si arresta in modo anomalo che ora non riesce a riavviare mentre Windows si sta spegnendo.

Mentre possiamo gestire gli errori sui processi dei genitori, c'è un modo per gli host ActiveX di dire a Windows "Non sto ancora chiudendo, ma lo farò a tempo debito", o anche meglio, non avvisarli a Windows il primo posto?

Sia i processi genili, gli oggetti OOP e i loro ospiti sono in una miscela di C ++ e VB6.

È stato utile?

Soluzione

Diversi modi per farlo. Il tuo server OOP potrebbe semplicemente ignorare la richiesta di spegnimento, basandosi sul chiusura del client e rimuovere tutti i conteggi di riferimento. Probabilmente vuoi impostare un flag in modo da sapere immediatamente quando l'ultimo oggetto viene rilasciato, un server normalmente continua a funzionare per un po '.

Oppure potresti chiamare SetProcessShutDownParameters () nel server OOP. Passa un livello che hai ottenuto da GetProcessShutdownParameters () meno 1 in modo che il client riceva sempre la notifica di spegnimento prima del server. Funziona anche con server OOP che non hanno una finestra Toplevel nascosta per ottenere il messaggio Windows.

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top