Bonjour,

Mon problème est le suivant :
J'ai un programme (MFC) qui fait des calculs assez lourd et qui consomment pas mal de temps CPU.
Or j'ai besoin d'afficher un état de mes calculs au travers de voyant (CStatic avec 2 bitmaps que je switch quand nécessaire).

Le problème vient de l'affichage de ces voyants qui ne se rafraichissent pas.

J'ai fait un thread avec la classe CWinThread qui gère le toggle des voyants.
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
 
CMyClass::CMyClass()
{
	m_NbEvent = 0;
	m_MyEvent = NULL;
	m_bStatus=THR_STOPPED;					// Thread arreté
}
 
CMyClass::~CMyClass()
{
	if (m_MyEvent ) {
		for (int EvtI = 0 ; EvtI < m_NbEvent ; EvtI++)
			CloseHandle(m_MyEvent[EvtI]);
		delete m_MyEvent;
	}
}
 
void CMyClass::ToggleBitmap(int nIndex)
{
	::SetEvent(m_MyEvent[nIndex]);
}
 
void CMyClass::SetNbEvent(int iMaxEvent)
{
	m_NbEvent = iMaxEvent;
	m_MyEvent = new HANDLE[m_NbEvent];
	for (int EvtI = 0 ; EvtI < m_NbEvent ; EvtI++)
		m_MyEvent[EvtI] = CreateEvent(NULL, FALSE, FALSE, NULL);
}
 
BOOL CMyClass::InitInstance()
{
	m_bStatus= THR_RUNNING;
	DWORD Ret;
	int nEvent;
 
	// Debut boucle principale
	while (m_bStatus==THR_RUNNING) {
 
		Ret = ::WaitForMultipleObjects(m_NbEvent, m_MyEvent , FALSE, INFINITE);
		nEvent = Ret - WAIT_OBJECT_0;
		::ResetEvent(m_MyEvent[nEvent]);
 
		if (m_MainDlg) {
			if (m_MainDlg->m_cLight[nEvent])
				m_MainDlg->m_cLight[nEvent]->SetBitmap(m_MainDlg->m_bGreen);
		}
	};
	m_bStatus= THR_STOPPED;
	while (m_bStatus!=THR_STOPPED_ACK) Sleep (2000);
 
	return TRUE;
}
Le thread est créé avec une priorité normale (par défaut).