Kelas CThreadPool
Kelas ini menyediakan kumpulan utas pekerja yang memproses antrean item kerja.
Sintaks
template <class Worker, class ThreadTraits = DefaultThreadTraits>
class CThreadPool : public IThreadPoolConfig
Parameter
Pekerja
Kelas yang sesuai dengan arketipe pekerja yang menyediakan kode yang digunakan untuk memproses item kerja yang diantrekan pada kumpulan utas.
ThreadTraits
Kelas yang menyediakan fungsi yang digunakan untuk membuat utas di kumpulan.
Anggota
Konstruktor Publik
Nama | Deskripsi |
---|---|
CThreadPool::CThreadPool | Konstruktor untuk kumpulan utas. |
CThreadPool::~CThreadPool | Destruktor untuk kumpulan utas. |
Metode Publik
Nama | Deskripsi |
---|---|
CThreadPool::AddRef | IUnknown::AddRef Implementasi . |
CThreadPool::GetNumThreads | Panggil metode ini untuk mendapatkan jumlah utas di kumpulan. |
CThreadPool::GetQueueHandle | Panggil metode ini untuk mendapatkan handel port penyelesaian IO yang digunakan untuk mengantre item kerja. |
CThreadPool::GetSize | Panggil metode ini untuk mendapatkan jumlah utas di kumpulan. |
CThreadPool::GetTimeout | Panggil metode ini untuk mendapatkan waktu maksimum dalam milidetik bahwa kumpulan utas akan menunggu utas dimatikan. |
CThreadPool::Initialize | Panggil metode ini untuk menginisialisasi kumpulan utas. |
CThreadPool::QueryInterface | IUnknown::QueryInterface Implementasi . |
CThreadPool::QueueRequest | Panggil metode ini untuk mengantre item kerja yang akan ditangani oleh utas di kumpulan. |
CThreadPool::Release | IUnknown::Release Implementasi . |
CThreadPool::SetSize | Panggil metode ini untuk mengatur jumlah utas di kumpulan. |
CThreadPool::SetTimeout | Panggil metode ini untuk mengatur waktu maksimum dalam milidetik bahwa kumpulan utas akan menunggu utas dimatikan. |
CThreadPool::Shutdown | Panggil metode ini untuk mematikan kumpulan utas. |
Keterangan
Utas di kumpulan dibuat dan dihancurkan saat kumpulan diinisialisasi, diubah ukurannya, atau dimatikan. Instans pekerja kelas akan dibuat pada tumpukan setiap utas pekerja di kumpulan. Setiap instans akan hidup selama masa pakai utas.
Segera setelah pembuatan utas, Pekerja::Initialize
akan dipanggil pada objek yang terkait dengan utas tersebut. Segera sebelum penghancuran utas, Pekerja::Terminate
akan dipanggil. Kedua metode harus menerima void
* argumen. Nilai argumen ini diteruskan ke kumpulan utas melalui parameter pvWorkerParam dari CThreadPool::Initialize.
Ketika ada item kerja dalam antrean dan utas pekerja yang tersedia untuk pekerjaan, utas pekerja akan menarik item dari antrean dan memanggil Execute
metode objek Pekerja untuk utas tersebut. Tiga item kemudian diteruskan ke metode : item dari antrean, yang sama pvWorkerParam
diteruskan ke Pekerja:: Initialize
dan Pekerja:: Terminate
, dan penunjuk ke struktur TUMPANG TINDIH yang digunakan untuk antrean port penyelesaian IO.
Kelas Pekerja mendeklarasikan jenis item yang akan diantrekan pada kumpulan utas dengan menyediakan typedef, Worker:: RequestType
. Jenis ini harus mampu dilemparkan ke dan dari ULONG_PTR.
Contoh kelas Pekerja adalah Kelas CNonStatelessWorker.
Hierarki Warisan
IUnknown
CThreadPool
Persyaratan
Header: atlutil.h
CThreadPool::AddRef
IUnknown::AddRef
Implementasi .
ULONG STDMETHODCALLTYPE AddRef() throw();
Tampilkan Nilai
Selalu mengembalikan 1.
Keterangan
Kelas ini tidak menerapkan kontrol seumur hidup menggunakan penghitungan referensi.
CThreadPool::CThreadPool
Konstruktor untuk kumpulan utas.
CThreadPool() throw();
Keterangan
Menginisialisasi nilai batas waktu untuk ATLS_DEFAULT_THREADPOOLSHUTDOWNTIMEOUT. Waktu default adalah 36 detik. Jika perlu, Anda dapat menentukan nilai bilangan bulat positif Anda sendiri untuk simbol ini sebelum menyertakan atlutil.h.
CThreadPool::~CThreadPool
Destruktor untuk kumpulan utas.
~CThreadPool() throw();
Keterangan
Memanggil CThreadPool::Shutdown.
CThreadPool::GetNumThreads
Panggil metode ini untuk mendapatkan jumlah utas di kumpulan.
int GetNumThreads() throw();
Tampilkan Nilai
Mengembalikan jumlah utas dalam kumpulan.
CThreadPool::GetQueueHandle
Panggil metode ini untuk mendapatkan handel port penyelesaian IO yang digunakan untuk mengantre item kerja.
HANDLE GetQueueHandle() throw();
Tampilkan Nilai
Mengembalikan handel antrean atau NULL jika kumpulan utas belum diinisialisasi.
CThreadPool::GetSize
Panggil metode ini untuk mendapatkan jumlah utas di kumpulan.
HRESULT STDMETHODCALLTYPE GetSize(int* pnNumThreads) throw();
Parameter
pnNumThreads
[out] Alamat variabel yang, pada keberhasilan, menerima jumlah utas di kumpulan.
Tampilkan Nilai
Mengembalikan S_OK saat berhasil, atau kesalahan HRESULT saat gagal.
CThreadPool::GetTimeout
Panggil metode ini untuk mendapatkan waktu maksimum dalam milidetik bahwa kumpulan utas akan menunggu utas dimatikan.
HRESULT STDMETHODCALLTYPE GetTimeout(DWORD* pdwMaxWait) throw();
Parameter
pdwMaxWait
[out] Alamat variabel yang, pada keberhasilan, menerima waktu maksimum dalam milidetik bahwa kumpulan utas akan menunggu utas dimatikan.
Tampilkan Nilai
Mengembalikan S_OK saat berhasil, atau kesalahan HRESULT saat gagal.
Keterangan
Nilai batas waktu ini digunakan oleh CThreadPool::Shutdown jika tidak ada nilai lain yang diberikan ke metode tersebut.
CThreadPool::Initialize
Panggil metode ini untuk menginisialisasi kumpulan utas.
HRESULT Initialize(
void* pvWorkerParam = NULL,
int nNumThreads = 0,
DWORD dwStackSize = 0,
HANDLE hCompletion = INVALID_HANDLE_VALUE) throw();
Parameter
pvWorkerParam
Parameter pekerja yang akan diteruskan ke objek Initialize
utas pekerja , Execute
, dan Terminate
metode.
nNumThreads
Jumlah utas yang diminta di kumpulan.
Jika nNumThreads negatif, nilai absolutnya akan dikalikan dengan jumlah prosesor di komputer untuk mendapatkan jumlah total utas.
Jika nNumThreads adalah nol, ATLS_DEFAULT_THREADSPERPROC akan dikalikan dengan jumlah prosesor di komputer untuk mendapatkan jumlah total utas. Defaultnya adalah 2 utas per prosesor. Jika perlu, Anda dapat menentukan nilai bilangan bulat positif Anda sendiri untuk simbol ini sebelum menyertakan atlutil.h.
dwStackSize
Ukuran tumpukan untuk setiap utas di kumpulan.
hCompletion
Handel objek yang akan dikaitkan dengan port penyelesaian.
Tampilkan Nilai
Mengembalikan S_OK saat berhasil, atau kesalahan HRESULT saat gagal.
CThreadPool::QueryInterface
IUnknown::QueryInterface
Implementasi .
HRESULT STDMETHODCALLTYPE QueryInterface(REFIID riid, void** ppv) throw();
Keterangan
Objek kelas ini dapat berhasil dikueri untuk IUnknown
antarmuka dan IThreadPoolConfig .
CThreadPool::QueueRequest
Panggil metode ini untuk mengantre item kerja yang akan ditangani oleh utas di kumpulan.
BOOL QueueRequest(Worker::RequestType request) throw();
Parameter
Permintaan
Permintaan yang akan diantrekan.
Tampilkan Nilai
Mengembalikan TRUE pada keberhasilan, FALSE pada kegagalan.
Keterangan
Metode ini menambahkan item kerja ke antrean. Utas di kumpulan memilih item dari antrean dalam urutan diterimanya.
CThreadPool::Release
IUnknown::Release
Implementasi .
ULONG STDMETHODCALLTYPE Release() throw();
Tampilkan Nilai
Selalu mengembalikan 1.
Keterangan
Kelas ini tidak menerapkan kontrol seumur hidup menggunakan penghitungan referensi.
CThreadPool::SetSize
Panggil metode ini untuk mengatur jumlah utas di kumpulan.
HRESULT STDMETHODCALLTYPE SetSizeint nNumThreads) throw();
Parameter
nNumThreads
Jumlah utas yang diminta di kumpulan.
Jika nNumThreads negatif, nilai absolutnya akan dikalikan dengan jumlah prosesor di komputer untuk mendapatkan jumlah total utas.
Jika nNumThreads adalah nol, ATLS_DEFAULT_THREADSPERPROC akan dikalikan dengan jumlah prosesor di komputer untuk mendapatkan jumlah total utas. Defaultnya adalah 2 utas per prosesor. Jika perlu, Anda dapat menentukan nilai bilangan bulat positif Anda sendiri untuk simbol ini sebelum menyertakan atlutil.h.
Tampilkan Nilai
Mengembalikan S_OK saat berhasil, atau kesalahan HRESULT saat gagal.
Keterangan
Jika jumlah utas yang ditentukan kurang dari jumlah utas yang saat ini berada di kumpulan, objek menempatkan pesan matikan pada antrean yang akan diambil oleh utas tunggu. Ketika utas tunggu menarik pesan dari antrean, utas akan memberi tahu kumpulan utas dan keluar dari prosedur utas. Proses ini diulang hingga jumlah utas dalam kumpulan mencapai angka yang ditentukan atau sampai tidak ada utas yang keluar dalam periode yang ditentukan oleh GetTimeout/ SetTimeout. Dalam situasi ini, metode akan mengembalikan HRESULT yang sesuai dengan WAIT_TIMEOUT dan pesan matikan yang tertunda dibatalkan.
CThreadPool::SetTimeout
Panggil metode ini untuk mengatur waktu maksimum dalam milidetik bahwa kumpulan utas akan menunggu utas dimatikan.
HRESULT STDMETHODCALLTYPE SetTimeout(DWORD dwMaxWait) throw();
Parameter
dwMaxWait
Waktu maksimum yang diminta dalam milidetik bahwa kumpulan utas akan menunggu utas dimatikan.
Tampilkan Nilai
Mengembalikan S_OK saat berhasil, atau kesalahan HRESULT saat gagal.
Keterangan
Batas waktu diinisialisasi ke ATLS_DEFAULT_THREADPOOLSHUTDOWNTIMEOUT. Waktu default adalah 36 detik. Jika perlu, Anda dapat menentukan nilai bilangan bulat positif Anda sendiri untuk simbol ini sebelum menyertakan atlutil.h.
Perhatikan bahwa dwMaxWait adalah waktu kumpulan akan menunggu satu utas dimatikan. Waktu maksimum yang dapat diambil untuk menghapus beberapa utas dari kumpulan bisa sedikit kurang dari dwMaxWait dikalikan dengan jumlah utas.
CThreadPool::Shutdown
Panggil metode ini untuk mematikan kumpulan utas.
void Shutdown(DWORD dwMaxWait = 0) throw();
Parameter
dwMaxWait
Waktu maksimum yang diminta dalam milidetik bahwa kumpulan utas akan menunggu utas dimatikan. Jika 0 atau tidak ada nilai yang disediakan, metode ini akan menggunakan batas waktu yang ditetapkan oleh CThreadPool::SetTimeout.
Keterangan
Metode ini memposting permintaan matikan ke semua utas di kumpulan. Jika batas waktu habis, metode ini akan memanggil TerminateThread pada utas apa pun yang tidak keluar. Metode ini dipanggil secara otomatis dari destruktor kelas.