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
Créez une instance de cette classe.
Appelez CWorkerThread ::Initialize.
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.
Implémentez IWorkerThreadClient ::Execute pour effectuer une action lorsque le handle ou le minuteur est signalé.
Pour supprimer un objet de la liste des objets pouvant être attendus, appelez CWorkerThread ::RemoveHandle.
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 en cas de 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 en cas de 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 en cas de 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 en cas de 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 en cas de 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