Bonjour à tous,

j'ai défini un bouton. Lorsque l'on clique dessus, cela lance en boucle la lecture d'un capteur de pression et un capteur de température.

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
 
void CDlgMessung::OnLivetp() 
{
// TODO: Code für die Behandlungsroutine der Steuerelement-Benachrichtigung hier einfügen
 
	while(stoploop == false)
	{
 
	DWORD dwStart = GetTickCount();
	while( GetTickCount() - dwStart <= (2 * 1000) )
	 {
	     DoEvents(); 
	    if(stoploop == true) break; 
	}
	if(stoploop == true) break; 
	GetPandT(); // Récupère pression et température
	}
	stoploop = false;
}
La première boucle while attend que l'utilisateur clique sur un deuxième bouton qui met la variable boolénne stoploop à true. La deuxième boucle while, qui est en fait une temporisation, attend 2 secondes avant de relancer la requête vers les capteurs (temps d'intégration nécessaire au capteur). Le DoEvents() permet de récupérer les autres actions, et notamment le changement d'état de stoploop.

Tout se passe bien à condition que la souris "ne bouge pas trop" pendant la boucle. Si je fais attention à cela et clique sur le bouton Stop (qui met stoploop à true), tout se passe bien. Mais si je balade la souris un peu partout dans l'écran, là c'est le plantage.

Y aurait-il moyen par exemple de bloquer la souris et d'attendre que l'utilisateur frappe n'importe quelle touche pour quitter la boucle ?
Ou si vous avez des pistes pour conserver le code "presque" tel quel ?
Merci.