Bonjour à tous, je dois écrire du code avec des threads et ma faible expérience dans ce domaine me pousse à venir demander conseil avant.

Voici ce que je dois faire...

Lorsque j'instancie mon objet, créez un thread.
Dans ce thread, vérifier quelquechose à interval régulier.
A la destruction de l'objet, arretez le thread.
Dans l'arret du thread, faire une série de choses (style fermeture de fichier).

Et voici comment je vois les choses, j'espère ne pas faire de grosses erreurs et j'espere avoir l'avis de programeur rodés à ce genre de manipulations.

Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
 
// maclasse.h
#pragma once
#include "maclasseabstraite.h"
 
class CMaClasse :
	public CMaClasseAbstraite
{
public:
	CMaClasse();
	~CMaClasse(VOID);
 
private:
	HANDLE _thread;
	BOOL _continue;
 
	static DWORD WINAPI MaFonctionThread(LPVOID p);
};
 
// maclasse.cpp
#include "StdAfx.h"
#include "maclasse.h"
 
CRITICAL_SECTION CriticalSection;
 
CMaClasse::CMaClasse()
{
	_continue = TRUE;
	InitializeCriticalSectionAndSpinCount(&CriticalSection, 0x80000400);
	_thread = CreateThread(NULL, 0, MaFonctionThread, this, 0, NULL);
}
 
CMaClasse::~CMaClasse(VOID)
{
	EnterCriticalSection(&CriticalSection);
	_continue = FALSE;
	LeaveCriticalSection(&CriticalSection);
 
	WaitForSingleObject(_thread, 2000);
	CloseHandle(_thread);
 
	DeleteCriticalSection(&CriticalSection);
}
 
DWORD WINAPI CMaClasse::MaFonctionThread(LPVOID p)
{
	CMaClasse *pThis = reinterpret_cast<CMaClasse*>(p);
 
	EnterCriticalSection(&CriticalSection);
	while (pThis->_continue)
	{
		// Do your job
		Sleep(1000);
	}
	LeaveCriticalSection(&CriticalSection);
 
	return(0);
}
Merci de votre lecture!