Baca dalam bahasa Inggris

Bagikan melalui


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.

Sintaks

template <class ThreadTraits = DefaultThreadTraits>
class CWorkerThread

Parameter

ThreadTraits
Kelas yang menyediakan fungsi pembuatan utas, seperti CRTThreadTraits atau Win32ThreadTraits.

Anggota

Struktur terlindungi

Nama Deskripsi
WorkerClientEntry

Konstruktor Publik

Nama Deskripsi
CWorkerThread::CWorkerThread Konstruktor untuk utas pekerja.
CWorkerThread::~CWorkerThread Destruktor untuk utas pekerja.

Metode Publik

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.

Keterangan

Untuk menggunakan CWorkerThread

  1. Buat instans kelas ini.

  2. Panggil CWorkerThread::Initialize.

  3. Panggil CWorkerThread::AddHandle dengan handel objek kernel dan pointer ke implementasi IWorkerThreadClient.

    - atau -

    Panggil CWorkerThread::AddTimer dengan pointer ke implementasi IWorkerThreadClient.

  4. Terapkan IWorkerThreadClient::Execute untuk mengambil beberapa tindakan saat handel atau timer diberi sinyal.

  5. Untuk menghapus objek dari daftar objek yang dapat ditunda, panggil CWorkerThread::RemoveHandle.

  6. Untuk mengakhiri utas, panggil CWorkerThread::Shutdown.

Persyaratan

Header: atlutil.h

CWorkerThread::AddHandle

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();

Parameter

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.

Tampilkan Nilai

Mengembalikan S_OK saat berhasil, atau kesalahan HRESULT saat gagal.

Keterangan

IWorkerThreadClient::Execute akan dipanggil melalui pClient ketika handel, hObject, diberi sinyal.

CWorkerThread::AddTimer

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();

Parameter

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.

Tampilkan Nilai

Mengembalikan S_OK saat berhasil, atau kesalahan HRESULT saat gagal.

Keterangan

IWorkerThreadClient::Execute akan dipanggil melalui pClient ketika timer diberi sinyal.

Teruskan handel timer dari phTimer ke CWorkerThread::RemoveHandle untuk menutup timer.

CWorkerThread::CWorkerThread

Konstruktor.

CWorkerThread() throw();

CWorkerThread::~CWorkerThread

Destruktor.

~CWorkerThread() throw();

Keterangan

Memanggil CWorkerThread::Shutdown.

CWorkerThread::GetThreadHandle

Panggil metode ini untuk mendapatkan penanganan utas utas pekerja.

HANDLE GetThreadHandle() throw();

Tampilkan Nilai

Mengembalikan handel utas atau NULL jika utas pekerja belum diinisialisasi.

CWorkerThread::GetThreadId

Panggil metode ini untuk mendapatkan ID utas utas pekerja.

DWORD GetThreadId() throw();

Tampilkan Nilai

Mengembalikan ID utas atau NULL jika utas pekerja belum diinisialisasi.

CWorkerThread::Initialize

Panggil metode ini untuk menginisialisasi utas pekerja.

HRESULT Initialize() throw();

HRESULT Initialize(CWorkerThread<ThreadTraits>* pThread) throw();

Parameter

pThread
Utas pekerja yang ada.

Tampilkan Nilai

Mengembalikan S_OK saat berhasil, atau kesalahan HRESULT saat gagal.

Keterangan

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.

CWorkerThread::RemoveHandle

Panggil metode ini untuk menghapus handel dari daftar objek yang dapat ditunda.

HRESULT RemoveHandle(HANDLE hObject) throw();

Parameter

hObject
Handel yang akan dihapus.

Tampilkan Nilai

Mengembalikan S_OK saat berhasil, atau kesalahan HRESULT saat gagal.

Keterangan

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.

CWorkerThread::Shutdown

Panggil metode ini untuk mematikan utas pekerja.

HRESULT Shutdown(DWORD dwWait = ATL_WORKER_THREAD_WAIT) throw();

Parameter

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.

Tampilkan Nilai

Mengembalikan S_OK pada keberhasilan, atau kesalahan HRESULT pada kegagalan, seperti jika nilai batas waktu, dwWait, terlampaui.

Keterangan

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.

Lihat juga

DefaultThreadTraits
Kelas
Multithreading: Membuat Utas Pekerja
Antarmuka IWorkerThreadClient