Ho un'applicazione C++ Win32 scritta utilizzando l'API Win32 e desidero forzare l'uscita in una delle funzioni. C'è qualcosa come Exit()
o Destroy()
o Abort()
qualcosa di simile che lo interromperebbe?Come uscire dall'applicazione Win32 tramite API?
risposta
ExitProcess
è la funzione da usare, altrimenti è possibile utilizzare exit
, notare che né assicurare l'integrità del shutdown (es .: molti handle di perdite ecc. e le operazioni filettate verranno interrotte, anche se sono a metà di un'operazione, come un commit db)
PostQuitMessage()
è il modo standard e agevole di uscire da un'applicazione con finestre.
Non si chiuderà immediatamente ma pubblicherà un messaggio di uscita che verrà analizzato dal loop principale (se eseguito correttamente) e quindi uscirà dall'applicazione.
Se si utilizza un'applicazione Win32
con una procedura di finestra appropriata, è possibile utilizzare la funzione PostQuitMessage
.
Se si lavora con Visual C++, quindi utilizzare:
appena tornati dalla funzione WinMain
. Se si dispone di un loop di messaggi, utilizzare PostQuitMessage
per uscire. Non cercare di uscire dal processo durante l'esecuzione; è sciatto.
Aiiieeeeeeeeeeee. Non fare NESSUNO di queste cose!
uscita() e ExitProcess sono l'equivalente di una pistola e sparare il processo in faccia. Spero di non dover spiegare perché non è bello, specialmente per i processi che contengono oggetti condivisi come handle di database che potrebbero essere di sistema. So che è la norma in Android, ma questo è Windows e non lo facciamo qui.
Chiamare PostQuitMessage() direttamente può causare perdite di memoria. PostQuitMessage() è progettato per essere chiamato da WM_DESTROY. NON è NOT un messaggio destinato ad essere usato per chiedere a una finestra di chiudersi. È un meccanismo di callback per le applicazioni che inviano il loro codice di uscita alla shell. Si intende compilare WM_QUIT con il codice di uscita dell'applicazione. Se chiamate direttamente PostQuitMessage(), ignorerete interamente WM_DESTROY. Questo è problematico perché molte finestre - e widget figlio - sono molto corretti perform their clean-up in WM_DESTROY. Se salti questo messaggio mentendo alla finestra, negherai ai componenti la possibilità di ripulire.
E poiché siamo sull'argomento, non chiamare direttamente WM_DESTROY . Raymond Chen di Microsoft ha un articolo meraviglioso in cui spiega "Sending a window a WM_DESTROY message is like prank calling somebody pretending to be the police". È una specie di gemello malvagio di PostQuitMessage. Invece di uscire senza ripulire, stai chiedendo alla finestra di pulire senza uscire. Il window manager non sa mai di rimuovere i componenti, e ti rimane una finestra orfana morta in memoria. Sospiro.
La risposta corretta è pubblicare WM_CLOSE. Qualsiasi cosa utilizzi la procedura di finestra predefinita notificherà correttamente al gestore di finestre di distruggere la finestra che si sovrapporrà a WM_DESTROY quindi a WM_QUIT come previsto.
Se è necessario un comportamento diverso rispetto alla chiusura standard, l'altra alternativa è creare un messaggio WM_USER o WM_APP. Se la tua finestra ha una "fantasia" WM_CLOSE - ad esempio, dai all'utente un messaggio "Sei sicuro di voler uscire?" - e vuoi saltarlo, puoi definire un messaggio personalizzato con WM_USER o WM_APP e chiamalo al suo posto. Il messaggio definito dall'app implementerà il comportamento di chiusura predefinito e il WM_CLOSE associato ai gadget di sistema esegue il tuo comportamento di fantasia.
Spero che questo aiuti!
- 1. Ruby interfaccia win32 api
- 2. Come utilizzare le API win32 con python?
- 3. Chiamate API Mocking e Win32
- 4. Documentazione C++ Win32 API offline?
- 5. applicazione mio Win32 non uscire dal ciclo principale
- 6. Chiamare il metodo API Win32 da Java
- 7. Tasto rapido globale con API WIN32?
- 8. Qualsiasi API Win32 per ottenere gli screenshot?
- 9. Win32 API analogico di invio/cattura SIGTERM
- 10. Ciclo di gioco in Win32 API
- 11. scelta tra API win32 e .NET framework
- 12. std :: unique_ptr, deleters e API Win32
- 13. API Win32 chiamata Errore GetShortPathName in F #
- 14. Come inserire automaticamente le dichiarazioni API Win32 in C#?
- 15. Golang: come posso chiamare win32 API senza cgo?
- 16. Come uscire completamente da FHSTwitterEngine in Twitter Rest API v1.1?
- 17. Come uscire ":"?
- 18. Come uscire da un metodo senza uscire dal programma?
- 19. Autenticazione tramite Facebook tramite Rails API
- 20. chiama Win32 API in flex per impostare Affinità visualizzazione finestra
- 21. Creazione di menu di scelta rapida per Win32 API
- 22. Colori etichetta Gmail tramite API?
- 23. buffer Disable su reindirizzati stdout tubo (API Win32, C++)
- 24. Laravel 5.2 Autenticazione tramite API
- 25. Installazione di CA Cert root tramite codice su Win32
- 26. Buona o cattiva - API Win32 SetParent() tra diversi processi
- 27. API Win32 per enumerare le funzioni di esportazione dll?
- 28. win32 api per ottenere la velocità corrente del processore
- 29. Win32 API FindFirstFile e FindNextFile prestazioni vs riga di comando
- 30. Come uscire da beeline?
Quanto è forte il bisogno di essere? –
Bene, smettila subito, senza continuare. – bodacydo