Bagikan melalui


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::AddRefImplementasi .
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::QueryInterfaceImplementasi .
CThreadPool::QueueRequest Panggil metode ini untuk mengantre item kerja yang akan ditangani oleh utas di kumpulan.
CThreadPool::Release IUnknown::ReleaseImplementasi .
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

IThreadPoolConfig

CThreadPool

Persyaratan

Header: atlutil.h

CThreadPool::AddRef

IUnknown::AddRefImplementasi .

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 Initializeutas 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::QueryInterfaceImplementasi .

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::ReleaseImplementasi .

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.

Lihat juga

Antarmuka IThreadPoolConfig
DefaultThreadTraits
Kelas