Aracılığıyla paylaş


CThreadPool Sınıfı

Bu sınıf, bir iş öğesi kuyruğu işleyen bir çalışan iş parçacığı havuzu sağlar.

Sözdizimi

template <class Worker, class ThreadTraits = DefaultThreadTraits>
class CThreadPool : public IThreadPoolConfig

Parametreler

Çalışan
İş parçacığı havuzunda kuyruğa alınan iş öğelerini işlemek için kullanılan kodu sağlayan çalışan arketipine uyan sınıf.

ThreadTraits
Havuzdaki iş parçacıklarını oluşturmak için kullanılan işlevi sağlayan sınıf.

Üyeler

Ortak Oluşturucular

Ad Tanım
CThreadPool::CThreadPool İş parçacığı havuzu oluşturucu.
CThreadPool::~CThreadPool İş parçacığı havuzu için yıkıcı.

Genel Yöntemler

Ad Tanım
CThreadPool::AddRef uygulamasının uygulanması IUnknown::AddRef.
CThreadPool::GetNumThreads Havuzdaki iş parçacığı sayısını almak için bu yöntemi çağırın.
CThreadPool::GetQueueHandle İş öğelerini kuyruğa almak için kullanılan GÇ tamamlama bağlantı noktasının tutamacını almak için bu yöntemi çağırın.
CThreadPool::GetSize Havuzdaki iş parçacığı sayısını almak için bu yöntemi çağırın.
CThreadPool::GetTimeout İş parçacığı havuzunun bir iş parçacığının kapatılmasını bekleyeceği milisaniye cinsinden maksimum süreyi almak için bu yöntemi çağırın.
CThreadPool::Initialize İş parçacığı havuzunu başlatmak için bu yöntemi çağırın.
CThreadPool::QueryInterface uygulamasının uygulanması IUnknown::QueryInterface.
CThreadPool::QueueRequest Havuzdaki bir iş parçacığı tarafından işlenecek bir iş öğesini kuyruğa almak için bu yöntemi çağırın.
CThreadPool::Release uygulamasının uygulanması IUnknown::Release.
CThreadPool::SetSize Havuzdaki iş parçacığı sayısını ayarlamak için bu yöntemi çağırın.
CThreadPool::SetTimeout İş parçacığı havuzunun bir iş parçacığının kapatılmasını bekleyeceği milisaniye cinsinden maksimum süreyi ayarlamak için bu yöntemi çağırın.
CThreadPool::Shutdown İş parçacığı havuzunu kapatmak için bu yöntemi çağırın.

Açıklamalar

Havuz başlatıldığında, yeniden boyutlandırıldığında veya kapatıldığında havuzdaki iş parçacıkları oluşturulur ve yok edilir. Havuzdaki her çalışan iş parçacığının yığınında bir sınıf Çalışanı örneği oluşturulur. Her örnek, iş parçacığının ömrü boyunca yaşar.

İş parçacığı oluşturulduktan hemen sonra, Worker::Initialize bu iş parçacığıyla ilişkilendirilmiş nesnede çağrılır. İş parçacığının yok edilmesinden hemen önce Çalışan::Terminate çağrılır. Her iki yöntem de bir void* bağımsız değişken kabul etmelidir. Bu bağımsız değişkenin değeri, CThreadPool::Initialize öğesinin pvWorkerParam parametresi aracılığıyla iş parçacığı havuzuna geçirilir.

Kuyrukta iş öğeleri ve iş için kullanılabilir çalışan iş parçacıkları olduğunda, bir çalışan iş parçacığı kuyruktan bir öğe çeker ve bu iş parçacığı için Çalışan nesnesinin yöntemini çağırırExecute. Ardından yöntemine üç öğe geçirilir: kuyruktaki öğe, aynı pvWorkerParam öğe Worker:: Initialize ve Worker:: Terminateöğesine geçirilir ve GÇ tamamlama bağlantı noktası kuyruğu için kullanılan ÇAKIŞAN yapıya yönelik bir işaretçi.

Worker sınıfı, worker:: RequestTypeadlı bir tür tanımı sağlayarak iş parçacığı havuzunda kuyruğa alınacak öğelerin türünü bildirir. Bu tür bir ULONG_PTR'a ve ULONG_PTR atanabilmelidir.

Çalışan sınıfına örnek olarak CNonStatelessWorker Sınıfı verilmiştir.

Devralma Hiyerarşisi

IUnknown

IThreadPoolConfig

CThreadPool

Gereksinimler

Üst bilgi: atlutil.h

CThreadPool::AddRef

uygulamasının uygulanması IUnknown::AddRef.

ULONG STDMETHODCALLTYPE AddRef() throw();

İade Değeri

Her zaman 1 döndürür.

Açıklamalar

Bu sınıf, başvuru sayımını kullanarak yaşam süresi denetimi uygulamaz.

CThreadPool::CThreadPool

İş parçacığı havuzu oluşturucu.

CThreadPool() throw();

Açıklamalar

zaman aşımı değerini ATLS_DEFAULT_THREADPOOLSHUTDOWNTIMEOUT olarak başlatır. Varsayılan süre 36 saniyedir. Gerekirse, atlutil.h dosyasını eklemeden önce bu simge için kendi pozitif tamsayı değerinizi tanımlayabilirsiniz.

CThreadPool::~CThreadPool

İş parçacığı havuzu için yıkıcı.

~CThreadPool() throw();

Açıklamalar

CThreadPool::Shutdown'u çağırır.

CThreadPool::GetNumThreads

Havuzdaki iş parçacığı sayısını almak için bu yöntemi çağırın.

int GetNumThreads() throw();

İade Değeri

Havuzdaki iş parçacığı sayısını döndürür.

CThreadPool::GetQueueHandle

İş öğelerini kuyruğa almak için kullanılan GÇ tamamlama bağlantı noktasının tutamacını almak için bu yöntemi çağırın.

HANDLE GetQueueHandle() throw();

İade Değeri

İş parçacığı havuzu başlatılmadıysa kuyruk tutamacını veya NULL değerini döndürür.

CThreadPool::GetSize

Havuzdaki iş parçacığı sayısını almak için bu yöntemi çağırın.

HRESULT STDMETHODCALLTYPE GetSize(int* pnNumThreads) throw();

Parametreler

pnNumThreads
[out] Başarılı olduğunda havuzdaki iş parçacığı sayısını alan değişkenin adresi.

İade Değeri

Başarıda S_OK veya hatada HRESULT hatası döndürür.

CThreadPool::GetTimeout

İş parçacığı havuzunun bir iş parçacığının kapatılmasını bekleyeceği milisaniye cinsinden maksimum süreyi almak için bu yöntemi çağırın.

HRESULT STDMETHODCALLTYPE GetTimeout(DWORD* pdwMaxWait) throw();

Parametreler

pdwMaxWait
[out] Başarı durumunda iş parçacığı havuzunun bir iş parçacığının kapatılmasını bekleyeceği en uzun süreyi milisaniye cinsinden alan değişkenin adresi.

İade Değeri

Başarıda S_OK veya hatada HRESULT hatası döndürür.

Açıklamalar

Bu zaman aşımı değeri CThreadPool::Shutdown tarafından, bu yönteme başka bir değer sağlanmadıysa kullanılır.

CThreadPool::Initialize

İş parçacığı havuzunu başlatmak için bu yöntemi çağırın.

HRESULT Initialize(
    void* pvWorkerParam = NULL,
    int nNumThreads = 0,
    DWORD dwStackSize = 0,
    HANDLE hCompletion = INVALID_HANDLE_VALUE) throw();

Parametreler

pvWorkerParam
Çalışan iş parçacığı nesnesinin Initialize, Executeve Terminate yöntemlerine geçirilecek çalışan parametresi.

nNumThreads
Havuzdaki istenen iş parçacığı sayısı.

nNumThreads negatifse, toplam iş parçacığı sayısını elde etmek için mutlak değeri makinedeki işlemci sayısıyla çarpılır.

nNumThreads sıfırsa, ATLS_DEFAULT_THREADSPERPROC toplam iş parçacığı sayısını elde etmek için makinedeki işlemci sayısıyla çarpılır. Varsayılan değer işlemci başına 2 iş parçacığıdır. Gerekirse, atlutil.h dosyasını eklemeden önce bu simge için kendi pozitif tamsayı değerinizi tanımlayabilirsiniz.

dwStackSize
Havuzdaki her iş parçacığı için yığın boyutu.

hCompletion
Tamamlanma bağlantı noktasıyla ilişkilendirilecek nesnenin tanıtıcısı.

İade Değeri

Başarıda S_OK veya hatada HRESULT hatası döndürür.

CThreadPool::QueryInterface

uygulamasının uygulanması IUnknown::QueryInterface.

HRESULT STDMETHODCALLTYPE QueryInterface(REFIID riid, void** ppv) throw();

Açıklamalar

Bu sınıfın nesneleri ve IThreadPoolConfig arabirimleri için IUnknown başarıyla sorgulanabilir.

CThreadPool::QueueRequest

Havuzdaki bir iş parçacığı tarafından işlenecek bir iş öğesini kuyruğa almak için bu yöntemi çağırın.

BOOL QueueRequest(Worker::RequestType request) throw();

Parametreler

Istek
Kuyruğa alınması isteği.

İade Değeri

Başarılı olduğunda TRUE, hatada YANLIŞ döndürür.

Açıklamalar

Bu yöntem kuyruğa bir iş öğesi ekler. Havuzdaki iş parçacıkları, kuyruktan alınan sırayla öğeleri seçer.

CThreadPool::Release

uygulamasının uygulanması IUnknown::Release.

ULONG STDMETHODCALLTYPE Release() throw();

İade Değeri

Her zaman 1 döndürür.

Açıklamalar

Bu sınıf, başvuru sayımını kullanarak yaşam süresi denetimi uygulamaz.

CThreadPool::SetSize

Havuzdaki iş parçacığı sayısını ayarlamak için bu yöntemi çağırın.

HRESULT STDMETHODCALLTYPE SetSizeint nNumThreads) throw();

Parametreler

nNumThreads
Havuzdaki istenen iş parçacığı sayısı.

nNumThreads negatifse, toplam iş parçacığı sayısını elde etmek için mutlak değeri makinedeki işlemci sayısıyla çarpılır.

nNumThreads sıfırsa, ATLS_DEFAULT_THREADSPERPROC toplam iş parçacığı sayısını elde etmek için makinedeki işlemci sayısıyla çarpılır. Varsayılan değer işlemci başına 2 iş parçacığıdır. Gerekirse, atlutil.h dosyasını eklemeden önce bu simge için kendi pozitif tamsayı değerinizi tanımlayabilirsiniz.

İade Değeri

Başarıda S_OK veya hatada HRESULT hatası döndürür.

Açıklamalar

Belirtilen iş parçacığı sayısı havuzda bulunan iş parçacığı sayısından azsa, nesne bekleyen bir iş parçacığı tarafından alınmak üzere kuyruğa kapatma iletisi yerleştirir. Bekleyen bir iş parçacığı iletiyi kuyruktan çektiğinde, iş parçacığı havuzuna bildirir ve iş parçacığı yordamından çıkar. Havuzdaki iş parçacığı sayısı belirtilen sayıya ulaşana kadar veya GetTimeout SetTimeout/ tarafından belirtilen süre içinde hiçbir iş parçacığından çıkılana kadar bu işlem yinelenir. Bu durumda yöntem, WAIT_TIMEOUT karşılık gelen bir HRESULT döndürür ve bekleyen kapatma iletisi iptal edilir.

CThreadPool::SetTimeout

İş parçacığı havuzunun bir iş parçacığının kapatılmasını bekleyeceği milisaniye cinsinden maksimum süreyi ayarlamak için bu yöntemi çağırın.

HRESULT STDMETHODCALLTYPE SetTimeout(DWORD dwMaxWait) throw();

Parametreler

dwMaxWait
İş parçacığı havuzunun bir iş parçacığının kapatılmasını bekleyeceği milisaniye cinsinden istenen en uzun süre.

İade Değeri

Başarıda S_OK veya hatada HRESULT hatası döndürür.

Açıklamalar

Zaman aşımı ATLS_DEFAULT_THREADPOOLSHUTDOWNTIMEOUT olarak başlatılır. Varsayılan süre 36 saniyedir. Gerekirse, atlutil.h dosyasını eklemeden önce bu simge için kendi pozitif tamsayı değerinizi tanımlayabilirsiniz.

dwMaxWait'in havuzun tek bir iş parçacığının kapatılmasını bekleyeceği zamandır. Havuzdan birden çok iş parçacığını kaldırmak için gereken en uzun süre, dwMaxWait değerinin iş parçacığı sayısıyla çarpılmasından biraz daha kısa olabilir.

CThreadPool::Shutdown

İş parçacığı havuzunu kapatmak için bu yöntemi çağırın.

void Shutdown(DWORD dwMaxWait = 0) throw();

Parametreler

dwMaxWait
İş parçacığı havuzunun bir iş parçacığının kapatılmasını bekleyeceği milisaniye cinsinden istenen en uzun süre. 0 değeri sağlanıyorsa veya hiç değer sağlanmazsa, bu yöntem CThreadPool::SetTimeout tarafından ayarlanan zaman aşımını kullanır.

Açıklamalar

Bu yöntem havuzdaki tüm iş parçacıklarına bir kapatma isteği postalar. Zaman aşımı süresi dolarsa, bu yöntem çıkmamış herhangi bir iş parçacığında TerminateThread'i çağırır. Bu yöntem, sınıfın yıkıcısından otomatik olarak çağrılır.

Ayrıca bkz.

IThreadPoolConfig Arabirimi
DefaultThreadTraits
Sınıflar