Bonjour,


Mon problème se situe au niveau d'une de mes classes (appelons là SerialParser) qui hérite de Thread. Elle est construite avec, comme paramètre, un objet donnant accès au port série.

Son fonctionnement est le suivant:
- Lire le port série.
- Parser le flux en message.
- Identifier les messages.
- Sauvegarde les valeurs voulues dans un objet.
- Stockage de l'objet dans une liste.

Elle fait ça en boucle.

Seulement voilà, je dois pouvoir mettre tout ce mécanisme en pause pour utiliser le port série dans une autre de mes classes (DebugSerial). Car je dois lire le port série avec DebugSerial et si les deux classes fonctionnent en même temps, j'aurai des informations disséquées.

Pour ce faire, lorsque DebugSerial se met à fonctionner, elle commence par appeler une méthode "suspendThread()" sur SerialParser. Selon les recommandations de la Java doc, cela a pour effet de mettre un booléen "suspended" à true. La mise en pause se fera ensuite automatiquement dans mon "run()" qui contient:

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
 
@Override
public void run()
{
	while(isRunning)
	{
		...
		try
		{
			if(this.suspended)
			{
				synchronized (this)
				{
					while (this.suspended)
						this.wait();
				}
			}
		}
		catch (InterruptedException e){}
	}
}
En théorie ça marche nickel ! Seulement, dans mon code, à la place des "...", j'ai énormément de traitement avec d'éventuelles attentes bloquantes lorsque je lis sur le port série.

Du coup, la mise en attente de mon Thread se fera pas tout de suite et dans le pire des cas, pourrait ne jamais avoir lieux. Du coup, j'ai besoin d'une indication dans ma classe DebugSerial pour savoir quand est-ce que SerialParser est suspendu afin de pouvoir utilisé le port série sans risque.

Voilà, j'espère que j'ai été assez clair ^.^

Merci d'avance pour vos idées.