Aracılığıyla paylaş


try finally ifadesi

Microsoft özel

Aşağıdaki sözdizimini açıklar try-finally ifadesi:

__try {
   // guarded code
}
__finally {
   // termination code
}

Dilbilgisi

  • try-finally-ifadesi:
    __try bileşik deyim

    __finally bileşik deyim

try-finally Hedef uygulamaların kod bloğunu yürütülmesini kesintiye uğradığında temizleme kod yürütülmesini garanti sağlayan bir Microsoft uzantısı c ve C++ dili ifadesidir.Temizleme bellek ayırmayı kaldırma dosyaları kapatma ve dosya tanıtıcısı serbest bırakma gibi görevler içerir.try-finally Deyimi burada çek yapılan neden olabilecek hata için erken birkaç yer vardır yordamları yordamından dönmek için özellikle yararlıdır.

Örnek kod ve ilgili bilgi için bkz: deneyin-ifadesi hariç.Yapılandırılmış özel durum işleme genel hakkında daha fazla bilgi için bkz: Yapılandırılmış özel durum işleme.Yönetilen uygulamalar, özel durumları hakkında daha fazla bilgi için bkz: Özel durum işleme altında /clr.

[!NOT]

c ve C++ kaynak dosyalarını için Win32 ile çalışır işleme yapılandırılmış özel durum.Ancak, özellikle C++ için tasarlanmamıştır.C++ özel durum işleme kullanarak, kodunuzun daha taşınabilir olduğunu emin olabilirsiniz.Ayrıca, C++ özel durum işlemenin daha esnek özel durumlar her türlü işleyebilir olmamasıdır.C++ programları için C++ özel durum işleme mekanizmasını kullanmanız önerilir (deneyin ve catch, throw ifadeleri).

Sonra bileşik deyim __try yan tümcesinin guarded bölüm.Sonra bileşik deyim __finally yan tümcesinin sonlandırma işleyicisi.İşleyici guarded bölümüne bir özel durum (olağan dışı sona erdirme) veya standart Sonbahar (normal sonlandırma) aracılığıyla çıkıldı olsun guarded bölüm çıkılıncaya yürütmek, Eylemler kümesini belirtir.

Kontrol indiğinde bir __try basit sırasal çalıştırılmasına (Sonbahar üzerinden) beyannamenin.Denetim girdiğinde __try, onun ilişkili işleyicisi etkin duruma gelir.Akış denetiminin try bloğunun sonuna ulaştığında, yürütme gibi çalışır:

  1. Sonlandırma işleyicisi çağrılır.

  2. Sonlandırma işleyicisi tamamlandığında sonra yürütme devam __finally ifadesi.Olası bağımsız olarak nasıl bölüm sona erer (aracılığıyla Örneğin, bir goto guarded gövde dışında veya bir return deyimi), sonlandırma işleyicisi yürütülen before denetim akışını guarded bölümüne taşır.

    A __finally deyimi değil engellemek için bir uygun özel durum işleyicisi aranıyor.

Bir özel durum oluþursa __try blok, işletim sistemi için özel durum işleyici bulmak veya program başarısız olur.İşleyici, tüm bulunursa, __finally blokları çalıştırılır ve yürütme işleyicisinde sürdürür.

Örneğin, aşağıdaki çizimde gösterildiği gibi bir dizi işlev çağrıları bağlantılar işlevi a d, çalışması için varsayalım.Her işlev, bir sonlandırma işleyicisi vardır.Bir özel işlev d oluşturuldu ve a ele, yığın sistem unwinds gibi sonlandırma işleyicileri bu sırada verilir: d, c, b

Sonlandırma işleyicisi yürütme sırasını

Yürütme sırası sonlandırma işleyici

[!NOT]

Try finally davranışını kullanımını destekleyen bazı diğer dillerden farklı Son, C# gibi.Tek bir __try her ikisini birden değil, biri, olabilir __finally ve __except.Her ikisi de birlikte kullanılacak bir dış çalışın-dışında deyimi iç try-finally deyimi içine almanız gerekir.Blokların yürütüldüğünde belirleme kuralları da farklıdır.

Anahtar sözcük __leave

__leave Anahtar sözcüğü, sadece guarded bölümünü içinde geçerli bir try-finally deyimi ve etkisi olduğu guarded bölümün sonuna atlamak için.İlk ifade, sonlandırma işleyicisi at yürütme devam eder.

A goto ifadesi de guarded bölümüne atlayabilirsiniz, ancak yığın unwinding çağırır çünkü performansı düşürür.__leave Deyimi yığın unwinding olmaz çünkü daha verimli.

Olağan dışı sona erdirme

Çıkma bir try-finally ifadesi ile longjmp çalýþma zamaný iþlevi olağan dışı sona ermesi olarak kabul edilir.İçine atlamak için geçersiz bir __try deyimi, ancak yasal bir yöneticiyi atlamak için.Tüm __finally kalkış noktası arasında etkin deyimleri (normal sona erdirme __try blok) ve hedef ( __except özel durum işleme bloğu) çalıştırmanız gerekir.Bu yerel bir açılımı denir.

Bir deneyin blok atlama bloğunun dışına da dahil olmak üzere herhangi bir nedenle sona zamanından önce sistem ilişkili yürütür Son yığın unwinding in blok işleminin bir parçası olarak.Bu gibi durumlarda AbnormalTermination işlev içinden çağrılmışsa true verir Son engellemek; Aksi takdirde, false değerini döndürür.

Bir işlemin yürütme ortasında da öldürülüyor, sonlandırma işleyicisi çağrılmaz bir try-finally ifadesi.

SON Microsoft özel

Ayrıca bkz.

Başvuru

Sonlandırma işleyici yazmak

Yapılandırılmış özel durum işleme (C++)

C++ anahtar sözcükler

Termination-Handler Syntax