Çoklu İş Parçacığı Kullanımı: MFC Kullanıcı Arabirimi İş Parçacıkları Oluşturma
Kullanıcı arabirimi iş parçacığı genellikle kullanıcı girişini işlemek ve uygulamanın diğer bölümlerini yürüten iş parçacıklarından bağımsız olarak kullanıcı olaylarına yanıt vermek için kullanılır. Ana uygulama iş parçacığı (türetilmiş sınıfınızda CWinApp
sağlanır) sizin için zaten oluşturulmuş ve başlatılmış. Bu konuda, ek kullanıcı arabirimi iş parçacıkları oluşturmak için gereken adımlar açıklanmaktadır.
Kullanıcı arabirimi iş parçacığı oluştururken yapmanız gereken ilk şey CWinThread'den bir sınıf türetmektir. DECLARE_DYNCREATE ve IMPLEMENT_DYNCREATE makrolarını kullanarak bu sınıfı bildirmeniz ve uygulamanız gerekir. Bu sınıf bazı işlevleri geçersiz kılmalıdır ve diğerlerini geçersiz kılabilir. Bu işlevler ve yapması gerekenler aşağıdaki tabloda verilmiştir.
Kullanıcı Arabirimi İş Parçacığı Oluştururken Geçersiz Kılınacak İşlevler
İşlev | Purpose |
---|---|
ExitInstance | İş parçacığı sonlandırıldığında temizleme gerçekleştirin. Genellikle geçersiz kılınmış. |
InitInstance | İş parçacığı örneği başlatma işlemi gerçekleştirin. Geçersiz kılınmalıdır. |
OnIdle | İş parçacığına özgü boşta kalma süresi işlemesi gerçekleştirin. Genellikle geçersiz kılınmaz. |
PreTranslateMessage | İletileri ve DispatchMessage 'ye TranslateMessage göndermeden önce filtreleyin. Genellikle geçersiz kılınmaz. |
ProcessWndProcException | İş parçacığının iletisi ve komut işleyicileri tarafından oluşan işlenmeyen özel durumları kesme. Genellikle geçersiz kılınmaz. |
Çalıştır | İş parçacığı için denetim işlevi. İleti pompasını içerir. Nadiren geçersiz kılınmış. |
MFC, parametre aşırı yükleme aracılığıyla iki sürümü AfxBeginThread
sağlar: biri yalnızca çalışan iş parçacıkları, diğeri ise kullanıcı arabirimi iş parçacıkları veya çalışan iş parçacıkları oluşturabilir. Kullanıcı arabirimi iş parçacığınızı başlatmak için, aşağıdaki bilgileri sağlayarak AfxBeginThread'in ikinci aşırı yüklemesini çağırın:
(İsteğe bağlı) İstenen öncelik düzeyi. Varsayılan değer normal önceliktir. Kullanılabilir öncelik düzeyleri hakkında daha fazla bilgi için bkz . Windows SDK'sında SetThreadPriority .
(İsteğe bağlı) İş parçacığı için istenen yığın boyutu. Varsayılan değer, oluşturma iş parçacığıyla aynı boyut yığınıdır.
(İsteğe bağlı) İş parçacığının askıya alınmış durumda oluşturulmasını istiyorsanız CREATE_SUSPENDED. Varsayılan değer 0'dır veya iş parçacığını normal şekilde başlatın.
(İsteğe bağlı) İstenen güvenlik öznitelikleri. Varsayılan değer, üst iş parçacığıyla aynı erişimdir. Bu güvenlik bilgilerinin biçimi hakkında daha fazla bilgi için bkz . Windows SDK'sında SECURITY_ATTRIBUTES .
AfxBeginThread
işinizin çoğunu sizin için yapar. Sınıfınızın yeni bir nesnesini oluşturur, sağladığınız bilgilerle başlatır ve iş parçacığını yürütmeye başlamak için CWinThread::CreateThread çağrısında bulunur. Oluşturma işleminin herhangi bir bölümü başarısız olursa tüm nesnelerin serbest bırakıldığından emin olmak için yordam boyunca denetimler yapılır.