Aracılığıyla paylaş


İş Parçacığı Başvurularını Yönetme

Bu makale, Shell'in hafif yardımcı işlevleri kullanılarak iş parçacığı referanslarının yönetimi hakkında bilgi içerir.

Ana iş parçacığının, alt iş parçacığının ömrü boyunca etkin tutulması gerektiğinde durumlar ortaya çıkar. Örneğin, üst iş parçacığında bir Bileşen Nesne Modeli (COM) nesnesi oluşturulur ve alt iş parçacığına sıralanırsa, bu üst iş parçacığı alt iş parçacığından önce sonlandırılamaz. Bunu gerçekleştirmek için Shell bu işlevleri sağlar.

Bu işlevleri burada açıklandığı gibi ana iş parçacığınızda kullanın.

  1. ThreadProc işlevi biçiminde uygulama tanımlı bir iş parçacığı yordamı bildirin.

    DWORD WINAPI ThreadProc(LPVOID lpParameter);
    
  2. ThreadProc, iş parçacığına referans oluşturmak amacıyla SHCreateThreadRef çağırın. Bu, IUnknownörneğine yönelik bir işaretçi sağlar. Bu IUnknown, başvuru sayısını korumak için pcRef tarafından işaret edilen değeri kullanır. Bu sayı 0'dan büyük olduğu sürece iş parçacığı etkin kalır.

  3. Bu işaretçiyi IUnknowniçin kullanarak, ThreadProciçinde SHSetThreadRef'yi çağırın. Bu, SHGetThreadRef'e yapılan sonraki çağrıların alınacak bir şeye sahip olması için başvuruyu ayarlar.

  4. ThreadProc başka bir iş parçacığı oluşturursa, bu iş parçacığının ThreadProc, SHCreateThreadRefile elde edilen IUnknown işaretçisini kullanarak SHGetThreadRef çağırabilir. SHCreateThreadRefiçindeki pcRef parametresi tarafından işaret edilen başvurunun sayısını artırır.

  5. İş parçacığını oluşturun. Bu işlem, genellikle SHCreateThreadçağrılarak, pfnThreadProc parametresinde ThreadProc bir işaretçi geçirerek yapılır. Ayrıca dwFlags parametresinde CTF_THREAD_REF bayrağını geçirin. İş parçacığı, ThreadProc yürütüldüğü sürece aktiftir.

  6. Bir alt iş parçacığı oluşturulduğunda, SHCreateThreadçağrısında dwFlags parametresine CTF_REF_COUNTED bayrağını geçirin.

  7. Alt iş parçacıkları tamamlandıktan ve serbest bırakıldıktan sonra, üst iş parçacığının pcRef işaret ettiği değer azalır. Tüm alt iş parçacıkları tamamlandıktan sonra, özgün ThreadProc tamamlanarak son iş parçacığı referansı serbest bırakır ve başvuru sayısını 0'a düşürür. Bu noktada, özgün iş parçacığını açan SHCreateThread'e yapılan başvuru serbest bırakılır ve iş parçacığı tamamlanır.

İlgili bir diğer işlev de SHReleaseThreadRef. CTF_THREAD_REF bayrağıyla SHCreateThread kullanılarak iş parçacığı oluşturulduysa, bu işlev ThreadProc tarafından çağrılır. Ancak, ThreadProc bunu kendiliğinden yapmak zorunda değildir. Yapılması gereken tek şey, IUnknown::Release'in SHCreateThreadRef aracılığıyla elde edilen IUnknown göstergesi üzerinde çağrılmasıdır.