我有一個使用Win32 API編寫的C++ Win32應用程序,我希望強制它在某個函數中退出。有沒有像Exit()
或Destroy()
或Abort()
類似的東西,只會終止它?如何通過API退出Win32應用程序?
回答
ExitProcess
是使用功能,否則你可以使用exit
,請注意,無論是投保的完整性關閉(即:你很多泄漏處理等功能,併線程操作將被終止,即使他們是中途的操作,如DB提交)
PostQuitMessage()
是退出窗口應用程序的標準,優雅的方式。
它不會立即退出,而是發佈退出消息,該消息將被您的主循環解析(如果正確完成),然後退出應用程序。
如果您正在使用具有適當窗口過程的Win32
應用程序,則可以使用功能PostQuitMessage
。
如果你正在使用Visual C++的工作,然後使用:
剛從WinMain
函數返回。如果您有消息循環,請使用PostQuitMessage
來突破。不要試圖在執行過程中退出進程;它是馬虎。
Aiiieeeeeeeeeeee。不要做任何這些事情!
退出()和ExitProcess的是採取了槍,臉上拍攝過程中的等價物。我希望我不必解釋爲什麼這不是很好,特別是對於持有共享對象(如可能是系統範圍的數據庫句柄)的進程。我知道這是Android的常態,但這是Windows,我們不會這樣做。
直接調用PostQuitMessage()會導致內存泄漏。 PostQuitMessage()旨在從WM_DESTROY中調用。 這並非不是用於要求窗戶關閉的消息。這是應用程序將退出代碼發回到shell的回調機制。它旨在用應用程序退出代碼填充WM_QUIT。如果直接調用PostQuitMessage(),則會完全繞過WM_DESTROY。這是有問題的,因爲許多窗口 - 和子窗口小部件 - 非常正確perform their clean-up in WM_DESTROY.如果您通過躺在窗口上跳過此消息,您將拒絕組件清理的機會。
由於我們在這個話題上,也不直接調用WM_DESTROY。微軟的Raymond Chen有一篇很好的文章,他解釋了"Sending a window a WM_DESTROY message is like prank calling somebody pretending to be the police".這是PostQuitMessage的邪惡雙胞胎之一。不要在沒有清理的情況下退出,而是要求窗口清理而不退出。窗口管理器從不知道刪除組件,並且在內存中留下了一個死的孤兒窗口。嘆。
正確答案是發佈WM_CLOSE。任何使用默認窗口過程的東西都會正確地通知窗口管理器銷燬窗口,該窗口將按照預期將級聯到WM_DESTROY然後再級聯到WM_QUIT。
如果您需要與標準關閉不同的行爲,另一種方法是創建一個WM_USER或WM_APP消息。如果你的窗口有一個「花哨的」WM_CLOSE--比如說,你給用戶一個提示「你確定要退出嗎?」 - 並且你想跳過它,你可以用WM_USER定義一條自定義消息或WM_APP並在其位置調用它。您的應用程序定義的消息將實現默認關閉行爲,並且與系統小工具綁定的WM_CLOSE會執行您的幻想行爲。
我希望有幫助!
- 1. 通過退出應用程序退出無限循環
- 2. pygtk應用程序不會通過win32上的刪除事件退出
- 3. 如何通過按下特定鍵退出應用程序?
- 4. Win32無窗口應用程序 - 等待程序退出
- 5. 程序VC++ Win32應用程序出錯?
- 6. Win32應用程序在關閉對話框時立即退出
- 7. 如何退出wpf應用程序
- 8. 如何退出android應用程序?
- 9. 如何退出Android應用程序?
- 10. android - 如何退出應用程序
- 11. 如何完全退出應用程序
- 12. 如何退出PhoneGap的應用程序?
- 13. 如何退出wp7應用程序?
- 14. 如何正常退出應用程序
- 15. 如何以編程方式通過按鈕單擊退出應用程序
- 16. Square API + OAuth:如何退出iPad應用程序?
- 17. 如何從Android應用程序中退出應用程序
- 18. 如何從Cygwin程序調用Win32 API
- 19. Win32線程意外退出
- 20. 如何退出VB6應用程序並設置退出代碼
- 21. 如何退出android應用程序退出按鈕?
- 22. 如何刪除退出頁面退出應用程序
- 23. 如何退出(退出)iPhone4的應用程序sdk
- 24. 通過API調用退出Instagram
- 25. Android。通過主頁點擊獲取應用程序退出
- 26. 通過鈦金屬的按鈕退出應用程序
- 27. 通過設置NSTimer退出應用程序?
- 28. 如何通過後退按鈕使應用程序最小化?
- 29. 退出Android應用程序
- 30. 退出Android應用程序
你需要它有多強大? –
好吧,只需在那裏放棄,不要繼續。 – bodacydo