WinApi schneller?
-
ich habe da mal ne frage.
wenn ich einen port abfrage, und dieser mir werte innerhalb von 1 ms liefern kann, wie kann ich diese dann mittels einer picturebox gleichzeitig vernünftig zeichnen, ohne dass die ApiFunktion LineTo() zu lange dafür benötigt.
ich denke mal der prozess mit empfangenen daten würde sogar noch unter 1ms bleiben, allerdings muss das ganze ja auch sichtbar gemacht werden, und wenn möglich gleichzeitig.
kann mir jemand einen lösungsansatz erklären, wie man solche prozesse sinnvoll umsetzt?
vielleicht mit Threads?
Danke im vorraus.
-
Natürlich über die Canvas->LineTo() funktion aus dem BCB.
-
Warum würdest du mit einer Auflösung von <= 1 ms in Echtzeit zeichnen wollen?
Wie man schön an den Einstellungen der Monitorfrequenzen sehen kann ist für das menschliche Auge allerspätestens bei ca. 100Hz Schluss, also bei 10ms Auflösung.Nur weil die Daten so schnell geliefert werden heisst das doch nicht, dass auch alle dargestellt werden müssen. Jeden zehnten, zwanzigsten oder gar nur hundertsten Wert zu zeichnen dürfte üblicherweise ausreichen. Intern kannst du ja trotzdem alle Werte speichern.
Die Zeichen- oder die Lesefunktion sollte natürlich in einen eigenen Thread ausgelagert werden, um eben das schnelle Einlesen nicht zu behindern.Und was die Performance von LineTo angeht, probier's doch einfach mal aus.
-
also, erst einmal danke.
natürlich habe ich es schon ausprobiert. und du hast auch recht, es ist nicht wichtig ALLE werte zu zeichnen, aber es ist wichtig wenn möglich alle werte zu speichern, doch da liegt das problem.
wie lese ich so schnell wie möglich alle werte aus dem port und zeichne [so schnell wie LineTo() es zulässt] die aktuellen in eine picturebox?
also wenn ich das im formular laufen lasse, dann benötigt windows durch die Application->ProcessMessage() zuviel zeit intern, um es sicher zu testen, wie schnell mir windows wirklich die werte liefern könnte.
haste vielleicht eine seite, die sich mit soetwas beschäftigt? ich wäre sehr daran interessiert zu erfahren, wie man unabhängig vom BS Prozesse dennoch schnell einliest.
z.b.
• thread kümmert sich um dateneinleserei (speichert alle)
• Hauptprogramm hat zeit und nimmt gerade aktuellen wert in zeichenoperation mit rein um darstellung zu aktualisierenkannst du mir so vielleicht einen denkanstoß geben?
danke im vorraus!
-
was heisst hier "z.b."? genau so wird das gemacht. Das Darstellen von Daten sollte immer getrennt von der eigentlichen Funktionalität abgehandelt werden!?
-junix
-
ok, vielen dank für bestätigung des lösungsansatzes, werde ich mal probieren.