Win32 API kullanılarak yazılmış bir C++ Win32 uygulamasına sahibim ve bu işlevlerden birinde çıkmak için zorlamak istiyorum. Exit()
veya Destroy()
veya Abort()
gibi bir şey var mı? Pencereli bir uygulamadan çıkmanın standart, zarif yoluNasıl Win32 uygulaması API ile çıkmak için?
cevap
ExitProcess
kullanmak fonksiyonudur, başka bütünlüğünü sağlamak ne unutmayın exit
kullanabilirsiniz kapatma (yani: çok sayıda sızıntı tutamağı vb. ve iş parçacıklı işlemleri bir işlemden geçirildiyse bile, bir db işlemi gibi sonlandırılır)
.
Bu, hemen çıkmak değil, ana döngü tarafından ayrıştırılacak bir bırakma iletisi (doğru olarak yapılırsa) gönderir ve sonra uygulamayı bırakır.
Uygun bir pencere yordamı olan bir Win32
uygulaması kullanıyorsanız, PostQuitMessage
işlevini kullanabilirsiniz.
Eğer ++ görsel C ile çalışıyorsanız, o zaman kullanın:
Sadece WinMain
işlevinden döner. Bir mesaj döngünüz varsa, patlak vermek için PostQuitMessage
kullanın. İşlemin ortasında yürütmeyi denemeyin; özensiz.
Aiiieeeeeeeeeeee. Bu şeylerden hiçbirini yapmayın!
çıkış() ve ExitProcess silah alıp yüzüne sürecini çekim eşdeğerdir. Umarım bunun neden iyi olmadığını açıklamak zorunda değilim, özellikle de sistem çapında olabilecek veritabanı tanıtıcıları gibi paylaşılan nesneleri tutan işlemler için. Android'de bu norm olduğunu biliyorum, ama bu Windows ve biz bunu burada yapmıyoruz.
PostQuitMessage() öğesinin aranması doğrudan bellek sızıntılarına neden olabilir. PostQuitMessage() WM_DESTROY'den çağrılmak üzere tasarlanmıştır. Pencerenin kapatılmasını istemek için kullanılması amaçlanan bir mesaj DEĞİLDİR. Uygulamaların çıkış kodlarını kabuklara geri göndermeleri için bir geri çağırma mekanizması. WM_QUIT'i uygulama çıkış koduyla doldurmak amaçlanmıştır. Doğrudan PostQuitMessage() 'i çağırırsanız, WM_DESTROY'yi tamamen atlarsınız. Bu sorunludur, çünkü birçok pencere - ve çocuk widget'ları - çok doğru perform their clean-up in WM_DESTROY. Bu mesajı pencereye bakarak atlarsanız, bileşenlerin temizleme şansını reddedersiniz.
Ve konuyla ilgili olduğumuza göre, WM_DESTROY doğrudan arama yapmıyor. Microsoft'un Raymond Chen'in, harika bir makalesi var. O, "Sending a window a WM_DESTROY message is like prank calling somebody pretending to be the police". PostQuitMessage'ın kötülük ikizlerinden biri. Temizleme yapmadan çıkmak yerine, pencereden çıkmadan temizlik yapmasını istiyorsun. Pencere yöneticisi, bileşenleri çıkarmayı asla bilemez ve bellekte ölü bir yetim pencereyle kaldınız. İç çekmek.
doğru cevap WM_CLOSE göndermektir. Varsayılan pencere yordamını kullanan herhangi bir şey, WM_DESTROY için daha sonra WM_QUIT olarak tasarlanan pencereyi yok etmek için pencere yöneticisini doğru şekilde bilgilendirecektir.
Standart kapanıştan farklı bir davranışa ihtiyacınız varsa, diğer alternatif bir WM_USER veya WM_APP mesajı oluşturmaktır. Pencerenizin "süslü" bir WM_CLOSE varsa - örneğin, kullanıcıya "Çıkmak istediğinizden emin misiniz?" Sorusunu iletin - ve bunu atlamak istiyorsanız, WM_USER ile özel bir ileti tanımlayabilirsiniz veya WM_APP ve bunu kendi yerine çağırın. Uygulamanızın tanımladığı mesajınız varsayılan yakın davranışı uygular ve sistem araçlarına bağlı WM_CLOSE, fantezi davranışınızı gerçekleştirir.
Umarım bu yardımcı olur!
- 1. Win32 API?
- 2. Win32 API ile iş parçacıkları nasıl oluşturulur?
- 3. Win32 API oyun döngüsü
- 4. Win32 GUI demo uygulaması Java (applet) GUI
- 5. Geçersiz win32 Uygulaması Visual Studio Uygulaması
- 6. Geçerli bir Win32 uygulaması değil
- 7. Süreçler ada göre nasıl öldürülür? (Win32 API)
- 8. Win32 App bir WinRT API çağrısı için mümkün mü?
- 9. WIN32 API WM_REFLECT iletisi nedir?
- 10. Çıkmak için geri düğmesini kullanırsak neden android uygulaması yeniden başlatılır?
- 11. Rx - etkinlikten çıkmak için
- 12. Gui, Win32 API'sı ile
- 13. Java programından Win32 API yöntemini çağırma
- 14. Checkbox Win32 api C++ ile ilgili sorunlar kontrol edildi
- 15. Karışık C/C++ ile bir programdan çıkmak için nasıl temizlenir
- 16. Bir captcha ile başa çıkmak için Scrapy'yi nasıl kurarım
- 17. nlsxbe.dll geçerli bir Win32 uygulaması değil
- 18. İşlev parametrelerini temel alarak bir Win32 API işlevinde nasıl kırılabilirim?
- 19. Eski facebook API ile facebook uygulaması oluştur
- 20. WPF, wxWidgets, Win32 API ve MFC arasında seçim yapma
- 21. C# ile Win32 olayları oluşturma #
- 22. WIN32
- 23. C# Win32 API bildirimleri otomatik olarak nasıl çekilir?
- 24. Win32:
- 25. Fareyi pencereden çıkmak nasıl durduruyor?
- 26. Visual C++ Win32 API kullanarak Internet bağlantısı ayrıntıları nasıl bilinirim?
- 27. win32 için cufft.lib eksik
- 28. Win32 işlevi OpenFileDialog için?
- 29. Bir HandlerThread çıkmak için gerekli?
- 30. Elixir iex'i ctrl-D ile çıkmak için özelleştirebilir miyim?
Olmak için ne kadar güçlü ihtiyacınız var? –
Eh, sadece orada, devam etmeden çıkın. – bodacydo