Bonjour,
Je doit représenter une courbe en temps quasi réel.
Pour ce faire j'utilise:
- un thread qui empile une File de pts
- un thread qui dépile les pts
- et donc le "thread graphique" sur lequel je n'ai pas vraiment la main de ce que je comprend et auquel on accède par le Dispatcher de la fenêtre et en effectuant un Invoke
Or en logant avant et après l'appel au Dispatcher.Invoke j'ai des temps aléatoires allant de 3 à 110ms
Et de même en logant avant et après l'appel à la fonction de dessin même, des temps de 3 à 55ms ?!
Je ne comprend pas d'où peuvent venir ces temps aberrant, pourquoi de telles différences, et surtout comment puis je régulariser ça ?
(Comme dit precedement j'ai une pile de point, du coup avec ces delais la pile explose :S)
Boucle du thread de depile:
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 while (exRunningFlag) { lock (myLock) { while ( stackingListPoint.Count > 0) { LOG this.Dispatcher.Invoke(new Action(() => { LOG graph.AddPoint(this.stackingListPoint.Dequeue()); LOG }), System.Windows.Threading.DispatcherPriority.Send); LOG } } } Thread.Sleep(3); }Merci de toute aide que vous pourriez m'apporter, ou si j'ai manque quelquechose d'essentiel.
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 public void AddPoint(System.Windows.Point pt)//Data { int resNeedResize = needResize(pt); // ------ Cas particulier ou on doit redessiner toutes les courbes. Ce n'est pas lié aux temps abérants que je voie apparaitre if (resNeedResize != 0) { ReDraw(resNeedResize); return; } // ---- currentPt = ConversionDataPtToGraphPt(pt); if ((lastPt.X != -1) && (lastPt.Y != -1)) { g = CreateGraphics(); g.DrawLine(pen_Courbe, lastPt, currentPt); g.Flush(); } lastPt = currentPt; ListPointCollection.Last().Add(pt); }
Partager