Kelas CWorkerThread
Kelas ini membuat utas pekerja atau menggunakan yang sudah ada, menunggu pada satu atau beberapa handel objek kernel, dan menjalankan fungsi klien tertentu ketika salah satu handel diberi sinyal.
Penting
Kelas ini dan anggotanya tidak dapat digunakan dalam aplikasi yang dijalankan di Windows Runtime.
template <class ThreadTraits = DefaultThreadTraits>
class CWorkerThread
ThreadTraits
Kelas yang menyediakan fungsi pembuatan utas, seperti CRTThreadTraits atau Win32ThreadTraits.
Nama | Deskripsi |
---|---|
WorkerClientEntry |
Nama | Deskripsi |
---|---|
CWorkerThread::CWorkerThread | Konstruktor untuk utas pekerja. |
CWorkerThread::~CWorkerThread | Destruktor untuk utas pekerja. |
Nama | Deskripsi |
---|---|
CWorkerThread::AddHandle | Panggil metode ini untuk menambahkan handel objek yang dapat ditunggu ke daftar yang dikelola oleh utas pekerja. |
CWorkerThread::AddTimer | Panggil metode ini untuk menambahkan timer yang dapat ditunggu berkala ke daftar yang dikelola oleh utas pekerja. |
CWorkerThread::GetThreadHandle | Panggil metode ini untuk mendapatkan penanganan utas utas pekerja. |
CWorkerThread::GetThreadId | Panggil metode ini untuk mendapatkan ID utas utas pekerja. |
CWorkerThread::Initialize | Panggil metode ini untuk menginisialisasi utas pekerja. |
CWorkerThread::RemoveHandle | Panggil metode ini untuk menghapus handel dari daftar objek yang dapat ditunda. |
CWorkerThread::Shutdown | Panggil metode ini untuk mematikan utas pekerja. |
Buat instans kelas ini.
Panggil CWorkerThread::Initialize.
Panggil CWorkerThread::AddHandle dengan handel objek kernel dan pointer ke implementasi IWorkerThreadClient.
- atau -
Panggil CWorkerThread::AddTimer dengan pointer ke implementasi IWorkerThreadClient.
Terapkan IWorkerThreadClient::Execute untuk mengambil beberapa tindakan saat handel atau timer diberi sinyal.
Untuk menghapus objek dari daftar objek yang dapat ditunda, panggil CWorkerThread::RemoveHandle.
Untuk mengakhiri utas, panggil CWorkerThread::Shutdown.
Header: atlutil.h
Panggil metode ini untuk menambahkan handel objek yang dapat ditunggu ke daftar yang dikelola oleh utas pekerja.
HRESULT AddHandle(
HANDLE hObject,
IWorkerThreadClient* pClient,
DWORD_PTR dwParam) throw();
hObject
Handel ke objek yang dapat ditunda.
pClient
Penunjuk ke antarmuka IWorkerThreadClient pada objek yang akan dipanggil saat handel diberi sinyal.
dwParam
Parameter yang akan diteruskan ke IWorkerThreadClient::Execute saat handel diberi sinyal.
Mengembalikan S_OK saat berhasil, atau kesalahan HRESULT saat gagal.
IWorkerThreadClient::Execute akan dipanggil melalui pClient ketika handel, hObject, diberi sinyal.
Panggil metode ini untuk menambahkan timer yang dapat ditunggu berkala ke daftar yang dikelola oleh utas pekerja.
HRESULT AddTimer(
DWORD dwInterval,
IWorkerThreadClient* pClient,
DWORD_PTR dwParam,
HANDLE* phTimer) throw();
dwInterval
Menentukan periode timer dalam milidetik.
pClient
Penunjuk ke antarmuka IWorkerThreadClient pada objek yang akan dipanggil saat handel diberi sinyal.
dwParam
Parameter yang akan diteruskan ke IWorkerThreadClient::Execute saat handel diberi sinyal.
phTimer
[out] Alamat variabel HANDLE yang, saat berhasil, menerima handel ke timer yang baru dibuat.
Mengembalikan S_OK saat berhasil, atau kesalahan HRESULT saat gagal.
IWorkerThreadClient::Execute akan dipanggil melalui pClient ketika timer diberi sinyal.
Teruskan handel timer dari phTimer ke CWorkerThread::RemoveHandle untuk menutup timer.
Konstruktor.
CWorkerThread() throw();
Destruktor.
~CWorkerThread() throw();
Memanggil CWorkerThread::Shutdown.
Panggil metode ini untuk mendapatkan penanganan utas utas pekerja.
HANDLE GetThreadHandle() throw();
Mengembalikan handel utas atau NULL jika utas pekerja belum diinisialisasi.
Panggil metode ini untuk mendapatkan ID utas utas pekerja.
DWORD GetThreadId() throw();
Mengembalikan ID utas atau NULL jika utas pekerja belum diinisialisasi.
Panggil metode ini untuk menginisialisasi utas pekerja.
HRESULT Initialize() throw();
HRESULT Initialize(CWorkerThread<ThreadTraits>* pThread) throw();
pThread
Utas pekerja yang ada.
Mengembalikan S_OK saat berhasil, atau kesalahan HRESULT saat gagal.
Metode ini harus dipanggil untuk menginisialisasi objek setelah pembuatan atau setelah panggilan ke CWorkerThread::Shutdown.
Agar dua objek atau lebih CWorkerThread
menggunakan utas pekerja yang sama, inisialisasi salah satunya tanpa meneruskan argumen apa pun lalu meneruskan penunjuk ke objek tersebut Initialize
ke metode yang lain. Objek yang diinisialisasi menggunakan penunjuk harus dimatikan sebelum objek digunakan untuk menginisialisasinya.
Lihat CWorkerThread::Shutdown untuk informasi tentang bagaimana perilaku metode tersebut berubah saat diinisialisasi menggunakan penunjuk ke objek yang ada.
Panggil metode ini untuk menghapus handel dari daftar objek yang dapat ditunda.
HRESULT RemoveHandle(HANDLE hObject) throw();
hObject
Handel yang akan dihapus.
Mengembalikan S_OK saat berhasil, atau kesalahan HRESULT saat gagal.
Ketika handel dihapus IWorkerThreadClient::CloseHandle akan dipanggil pada objek terkait yang diteruskan ke AddHandle. Jika panggilan ini gagal, CWorkerThread
akan memanggil fungsi Windows CloseHandle pada handel.
Panggil metode ini untuk mematikan utas pekerja.
HRESULT Shutdown(DWORD dwWait = ATL_WORKER_THREAD_WAIT) throw();
dwWait
Waktu dalam milidetik untuk menunggu utas pekerja dimatikan. ATL_WORKER_THREAD_WAIT default menjadi 10 detik. Jika perlu, Anda dapat menentukan nilai Anda sendiri untuk simbol ini sebelum menyertakan atlutil.h.
Mengembalikan S_OK pada keberhasilan, atau kesalahan HRESULT pada kegagalan, seperti jika nilai batas waktu, dwWait, terlampaui.
Untuk menggunakan kembali objek, panggil CWorkerThread::Initialize setelah memanggil metode ini.
Perhatikan bahwa panggilan Shutdown
pada objek yang diinisialisasi dengan penunjuk ke objek lain CWorkerThread
tidak berpengaruh dan selalu mengembalikan S_OK.
DefaultThreadTraits
Kelas
Multithreading: Membuat Utas Pekerja
Antarmuka IWorkerThreadClient