Bonjour à tous,
j'ai un soft fait de blocs et d'un scheduler.
Chaque bloc a un thread propre avec une boucle de traitement du type:
(PS: idlePeriod_us = 0).
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13 while(run) { boost::mutex::scoped_lock lock(*InMutex); si nouvelles données - Gestion des données arrivantes: lock.unlock() boost::mutex::scoped_lock lock2(*OutMutex); si données générées - Gestion des données sortantes... lock2.unlock() boost::this_thread::sleep(boost::posix_time::microseconds(idlePeriod_us)); }
Le scheduler a aussi son thread propre qui a pour tache de faire passer les infos de blocs en blocs avec le même système de boucle. Les Mutex permettent d'éviter les accès simultanées aux données entrantes ou sortantes par les blocs et le scheduler.
Le logiciel tourne bien sur mon PC XP. C'est-à-dire que le flux de données entrants est bien traité en temps réel.
Je l'ai compilé sous 7, et un retard de traitement apparait dans le flux. En cherchant un peu, j'ai remplacé la ligne (pour chaque thread):
boost::this_thread::sleep(boost::posix_time::microseconds(idlePeriod_us));
par
boost::this_thread::yield();
et le retard dans la gestion du flux a disparu.
Le problème c'est que j'ai maintenant un 3e PC (sous XP SP3), et j'ai à nouveau le même problème de latence/retard dans la gestion de mon flux de données.
Est ce que quelqu'un a une idée de l'origine du problème ? Ou de solution. J'ai vu des techniques avancées avec des conditions d'attente. Est ce que cela pourrait arranger le problème ?
Merci !
Partager