Partage via


CWorkerThread, classe

Cette classe crée un thread de travail ou utilise un thread existant, attend sur un ou plusieurs handles d’objet noyau et exécute une fonction cliente spécifiée quand l’un des handles est signalé.

Important

Cette classe et ses membres ne peuvent pas être utilisés dans les applications qui s’exécutent dans Windows Runtime.

Syntaxe

template <class ThreadTraits = DefaultThreadTraits>
class CWorkerThread

Paramètres

ThreadTraits
Classe fournissant la fonction de création de thread, telle que CRTThreadTraits ou Win32ThreadTraits.

Membres

Structures protégées

Nom Description
WorkerClientEntry

Constructeurs publics

Nom Description
CWorkerThread ::CWorkerThread Constructeur pour le thread de travail.
CWorkerThread ::~CWorkerThread Destructeur du thread de travail.

Méthodes publiques

Nom Description
CWorkerThread ::AddHandle Appelez cette méthode pour ajouter le handle d’un objet attendable à la liste gérée par le thread de travail.
CWorkerThread ::AddTimer Appelez cette méthode pour ajouter un minuteur d’attente périodique à la liste gérée par le thread de travail.
CWorkerThread ::GetThreadHandle Appelez cette méthode pour obtenir le handle de thread du thread de travail.
CWorkerThread ::GetThreadId Appelez cette méthode pour obtenir l’ID de thread du thread de travail.
CWorkerThread ::Initialize Appelez cette méthode pour initialiser le thread de travail.
CWorkerThread ::RemoveHandle Appelez cette méthode pour supprimer un handle de la liste des objets pouvant être attendus.
CWorkerThread ::Shutdown Appelez cette méthode pour arrêter le thread de travail.

Notes

Pour utiliser CWorkerThread

  1. Créez une instance de cette classe.

  2. Appelez CWorkerThread ::Initialize.

  3. Appelez CWorkerThread ::AddHandle avec le handle d’un objet noyau et un pointeur vers une implémentation de IWorkerThreadClient.

    - ou -

    Appelez CWorkerThread ::AddTimer avec un pointeur vers une implémentation de IWorkerThreadClient.

  4. Implémentez IWorkerThreadClient ::Execute pour effectuer une action lorsque le handle ou le minuteur est signalé.

  5. Pour supprimer un objet de la liste des objets pouvant être attendus, appelez CWorkerThread ::RemoveHandle.

  6. Pour terminer le thread, appelez CWorkerThread ::Shutdown.

Spécifications

En-tête : atlutil.h

CWorkerThread ::AddHandle

Appelez cette méthode pour ajouter le handle d’un objet attendable à la liste gérée par le thread de travail.

HRESULT AddHandle(
    HANDLE hObject,
    IWorkerThreadClient* pClient,
    DWORD_PTR dwParam) throw();

Paramètres

hObject
Handle d’un objet pouvant être attendu.

pClient
Pointeur vers l’interface IWorkerThreadClient sur l’objet à appeler lorsque le handle est signalé.

dwParam
Paramètre à passer à IWorkerThreadClient ::Execute lorsque le handle est signalé.

Valeur de retour

Retourne S_OK sur la réussite ou une erreur HRESULT en cas d’échec.

Notes

IWorkerThreadClient ::Execute est appelé via pClient lorsque le handle, hObject, est signalé.

CWorkerThread ::AddTimer

Appelez cette méthode pour ajouter un minuteur d’attente périodique à la liste gérée par le thread de travail.

HRESULT AddTimer(
    DWORD dwInterval,
    IWorkerThreadClient* pClient,
    DWORD_PTR dwParam,
    HANDLE* phTimer) throw();

Paramètres

dwInterval
Spécifie la période du minuteur en millisecondes.

pClient
Pointeur vers l’interface IWorkerThreadClient sur l’objet à appeler lorsque le handle est signalé.

dwParam
Paramètre à passer à IWorkerThreadClient ::Execute lorsque le handle est signalé.

phTimer
[out] Adresse de la variable HANDLE qui, en cas de réussite, reçoit le handle du minuteur nouvellement créé.

Valeur de retour

Retourne S_OK sur la réussite ou une erreur HRESULT en cas d’échec.

Notes

IWorkerThreadClient ::Execute est appelé via pClient lorsque le minuteur est signalé.

Passez le handle du minuteur de phTimer à CWorkerThread ::RemoveHandle pour fermer le minuteur.

CWorkerThread ::CWorkerThread

Constructeur .

CWorkerThread() throw();

CWorkerThread ::~CWorkerThread

Destructeur.

~CWorkerThread() throw();

Notes

Appelle CWorkerThread ::Shutdown.

CWorkerThread ::GetThreadHandle

Appelez cette méthode pour obtenir le handle de thread du thread de travail.

HANDLE GetThreadHandle() throw();

Valeur de retour

Retourne le handle de thread ou NULL si le thread de travail n’a pas été initialisé.

CWorkerThread ::GetThreadId

Appelez cette méthode pour obtenir l’ID de thread du thread de travail.

DWORD GetThreadId() throw();

Valeur de retour

Retourne l’ID de thread ou NULL si le thread de travail n’a pas été initialisé.

CWorkerThread ::Initialize

Appelez cette méthode pour initialiser le thread de travail.

HRESULT Initialize() throw();

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

Paramètres

Pthread
Thread de travail existant.

Valeur de retour

Retourne S_OK sur la réussite ou une erreur HRESULT en cas d’échec.

Notes

Cette méthode doit être appelée pour initialiser l’objet après la création ou après un appel à CWorkerThread ::Shutdown.

Pour que deux objets ou plusieurs CWorkerThread utilisent le même thread de travail, initialisez l’un d’eux sans passer d’arguments, puis passez un pointeur vers cet objet aux Initialize méthodes des autres. Les objets initialisés à l’aide du pointeur doivent être arrêtés avant que l’objet utilisé pour les initialiser.

Consultez CWorkerThread ::Shutdown pour plus d’informations sur la façon dont le comportement de cette méthode change lors de l’initialisation à l’aide d’un pointeur vers un objet existant.

CWorkerThread ::RemoveHandle

Appelez cette méthode pour supprimer un handle de la liste des objets pouvant être attendus.

HRESULT RemoveHandle(HANDLE hObject) throw();

Paramètres

hObject
Handle à supprimer.

Valeur de retour

Retourne S_OK sur la réussite ou une erreur HRESULT en cas d’échec.

Notes

Lorsque le handle est supprimé , IWorkerThreadClient ::CloseHandle est appelé sur l’objet associé passé à AddHandle. Si cet appel échoue, CWorkerThread appelle la fonction Windows CloseHandle sur le handle.

CWorkerThread ::Shutdown

Appelez cette méthode pour arrêter le thread de travail.

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

Paramètres

dwWait
Temps en millisecondes d’attente de l’arrêt du thread de travail. ATL_WORKER_THREAD_WAIT la valeur par défaut est de 10 secondes. Si nécessaire, vous pouvez définir votre propre valeur pour ce symbole avant d’inclure atlutil.h.

Valeur de retour

Retourne S_OK sur la réussite ou une erreur HRESULT en cas d’échec, par exemple si la valeur de délai d’expiration, dwWait, est dépassée.

Notes

Pour réutiliser l’objet, appelez CWorkerThread ::Initialize après avoir appelé cette méthode.

Notez que l’appel Shutdown d’un objet initialisé avec un pointeur vers un autre CWorkerThread objet n’a aucun effet et retourne toujours S_OK.

Voir aussi

DefaultThreadTraits
Classes
Multithreading : création de threads de travail
IWorkerThreadClient, interface