Makale numarası: 951322 - Son Gözden Geçirme: 30 Nisan 2008 Çarşamba - Gözden geçirme: 1.0

Windows XP'de, Windows Server 2003 veya Windows Vista'da pseudohandles ile WaitForMultipleObjects() işlevi düzgün çalışmıyor

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

Belirtiler

WaitForMultipleObjects() işlevi doğru pseudohandles Windows XP, Windows Server 2003 veya Windows Vista ile birlikte çalışmaz.

Dikkate alın: Aşağıdaki örnek kodu.
int _tmain(int argc, _TCHAR* argv[])
{
      
      HANDLE hnd[1]; 
	long res; 
	hnd[0] = GetCurrentProcess(); 

        res = WaitForMultipleObjects(1, hnd, FALSE, 3000);
      return 0;
}
örnek kodu çalıştırmanızdan sonra işlevin üç saniye bekler. Ancak, bir "WAIT_FAILED" hatası verir ve bekleyin.

Pratik Çözüm

Bu soruna geçici bir çözüm bulmak için <a0></a0>, gerçek bir işlem tanıtıcısını pseudohandles dönüştürmek DuplicateHandle() işlevini kullanın.

Örneğin, aşağıdaki örnek kodu kullanma.
int _tmain(int argc, _TCHAR* argv[])
{
      
      HANDLE hnd[1]={0};
      long res; 
      HANDLE Threadhandle = ::GetCurrentThread();
      
      DuplicateHandle(GetCurrentProcess(), Threadhandle, 
      GetCurrentProcess(),
      &hnd[0], 
      0,
      FALSE,
      DUPLICATE_SAME_ACCESS);

      res = WaitForMultipleObjects(1, hnd, TRUE, 10000);

      return 0;
}

Daha fazla bilgi

Bu sorun, pseudohandle geçerli iş parçacığı veya işlem tanıtıcısı olarak yorumlanan özel bir sabit değer olduğu için oluşur. Arama iş parçacığı bu tanıtıcı, bir iş parçacığı tutamacı gerekli olduğunda, kendisini belirtmek için kullanabilirsiniz. Bu tutamaçları diğer iş parçacıkları tarafından başvurulan edemiyor. Bir pseudohandle her zaman bunu kullanan iş parçacığına başvuru olarak yorumlanır.

The pseudohandle artık gerekli olmadığında kapatılması gerekmez. Bu tanıtıcı için CloseHandle() işlevini çağırma hiçbir etkisi olmaz.

Bir işlem, kendisi için bir tanıtıcı elde etmek için GetCurrentProcess() işlevi veya GetCurrentHandle() işlevi kullanır. Bu tanıtıcı bir pseudohandle ' dir. Ancak, DuplicateHandle() işlevi için gerçek işlem tanıtıcı dönüştürür.

Bu makaledeki bilginin uygulandığı durum:
  • Microsoft Windows Server 2003 Standard Edition
  • Microsoft Windows Server 2003 Enterprise Edition
  • Microsoft Windows Server 2003 Datacenter Edition
  • Microsoft Windows Server 2003, Standard x64 Edition
  • Microsoft Windows Server 2003, Enterprise x64 Edition
  • Microsoft Windows Server 2003, Datacenter x64 Edition
  • Microsoft Windows Server 2003, Enterprise Edition for Itanium-based Systems
  • Microsoft Windows Server 2003, Datacenter Edition for Itanium-Based Systems
  • Microsoft Windows XP Professional Edition
  • Microsoft Windows XP Home Edition
  • Windows Vista Business
  • Windows Vista Enterprise
  • Windows Vista Home Basic
  • Windows Vista Home Premium
  • Windows Vista Ultimate
  • Windows Vista Business 64-bit edition
  • Windows Vista Enterprise 64-bit edition
  • Windows Vista Home Basic 64-bit edition
  • Windows Vista Home Premium 64-bit edition
  • Windows Vista Ultimate 64-bit edition
Anahtar Kelimeler: 
kbmt kbexpertiseinter kbtshoot kbprb KB951322 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:951322  (http://support.microsoft.com/kb/951322/en-us/ )