Makale numarası: 175332 - Son Gözden Geçirme: 21 Kasım 2006 Salı - Gözden geçirme: 2.1

SORUN: İşlem Broadcasting ileti kilitlenme neden oluyor

Sistem İpucuBu makale, kullandığınızdan farklı bir işletim sistemine yöneliktir. Sizinle ilgili olmayabilecek makale içeriği devre dışı bırakıldı.
Hepsini aç | Hepsini kapa

Daha fazla bilgi

Bir işlemin sonlandığını zaman bildirim almak için <a0></a0>, bir Win32 uygulaması WaitForSingleObject() arayın ve uygulamanın bekledi işlem tanıtıcısı belirtmek. Normalde bu bekledi uygulama sona erdirir kadar engellemek bekleyen işlem neden olur. Sonra yürütülecek WAIT_OBJECT_0 ve bekleyen işlem devam edecek WaitForSingleObject() döndürecektir.

Bazen uygulamalar iletileri bazı veya tüm diğer pencerelere sistemde yayın. Bu durumda bekleme uygulamayı iletileri işleyecek biçimde boş değilse, yukarıdaki yöntemi bir kilitlenme durumu neden olur. Bekletmeyi uygulama pencere iletilerini işleme kendi iş parçacığında beklemektedir, bekleme tamamlanana kadar sonra hiçbir ileti işlenebilir. Işlem SendMessage() çağrılarda bekledi ve bir ileti penceresinde <a0>bekleme</a0> işleminin yayınlar, sonra bir kilitlenmeyle sonuçlanır. SendMessage() ileti işlenir ve bekleyen işlem, WaitForSingleObject() çağrı dönünceye kadar ileti gönderme edemiyor kadar döndürmeyecektir. Ortak bir açıklaması için OLE göstergeleri, bu sorunun, başvurun aşağıdaki Knowledge Base makalesine:
136885  (http://support.microsoft.com/kb/136885/EN-US/ ) BILGI: OLE Threads iletileri gönderme olmalı
Bu kilitlenme önlemek için <a0></a0>, bekleyen uygulama, bu nedenle, işlem iletilerinin ana iş parçacığına boşaltmayı ayrı bir iş parçacığı beklemeniz gerekir. Işlem, bekledi tamamlar ve WaitForSingleObject() döndürür, bekleyen iş parçacığı ana iş parçacığı ana penceresinin ileti sırası için kullanıcı tanımlı bir ileti göndererek bildirebilir. Ana iş parçacığı kullanıcı tarafından tanımlanan ileti bekledi açma işleminin tamamlanması yorumlar. Kullanıcı tanımlı iletileri hakkında daha fazla bilgi için lütfen aşağıdaki Knowledge Base makalesine başvurun:
86835  (http://support.microsoft.com/kb/86835/EN-US/ ) Nasıl YAPıLıR: Uygulama kullanmak için özel iletiler tanımla
Bu sorunun oluşmaması için başka bir yolu, iletiye işlenmesi gerektiğinde, DispachMessage() çağıran bir döngü MsgWaitForMultipleObjects() Çağrı bekletmeyi iş parçacığının almaktır. Bu teknik, örneğin, OLE sorun (Q136885) farklı yukarıda başvurulan Bilgi Bankası makalesine bakın.

Belirtiler

Bir iletiyi yayınlar, başka bir işlem tanıtıcı bir işlem bekleyeceği zaman BIR kilitlenmeyle sonuçlanır.

Neden

Bekleyen işlem (ana pencere iş parçacığının) penceresine gönderilen iletileri işleyen iş parçacığında bekliyor bu ortaya çıkar.

Çözüm

Bu bir kilitlenme durumu önlemek için ana pencere iş parçacığının pencere iletilerini işleme veya MsgWaitForMultipleObjects() API iletileri gönderen ile birlikte kullanmak boş bırakarak ayrı bir iş parçacığında bekleyen işlem bekleyebilir.

Bu makaledeki bilginin uygulandığı durum:
  • Microsoft Win32 Uygulama Programlama Arabirimi, Ne zaman ne ile kullanilir:
    • Microsoft Windows NT 3.51 Service Pack 5
    • Microsoft Windows NT 4.0
    • Microsoft Windows 95
Anahtar Kelimeler: 
kbmt kbinfo KB175332 KbMttr
Otomatik TercümeOtomatik Tercüme
ÖNEMLİ: Bu makale, bir kişi tarafından çevrilmek yerine, Microsoft makine-çevirisi yazılımı ile çevrilmiştir. Microsoft size hem kişiler tarafından çevrilmiş, hem de makine-çevrisi ile çevrilmiş makaleler sunar. Böylelikle, bilgi bankamızdaki tüm makalelere, kendi dilinizde ulaşmış olursunuz. Bununla birlikte, makine tarafından çevrilmiş makaleler mükemmel değildir. Bir yabancının sizin dilinizde konuşurken yapabileceği hatalar gibi, makale; kelime dağarcığı, söz dizim kuralları veya dil bilgisi açısından yanlışlar içerebilir. Microsoft, içeriğin yanlış çevrimi veya onun müşteri tarafından kullanımından doğan; kusur, hata veya zarardan sorumlu değildir. Microsoft ayrıca makine çevirisi yazılımını sıkça güncellemektedir.
Makalenin İngilizcesi aşağıdaki gibidir:175332  (http://support.microsoft.com/kb/175332/en-us/ )