| 12
 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);
} | 
Partager