WinFuture-Forum.de: Timer Problem - WinFuture-Forum.de

Zum Inhalt wechseln

Nachrichten zum Thema: Entwicklung
Seite 1 von 1

Timer Problem C#


#1 Mitglied ist offline   DonElTomato 

  • Gruppe: aktive Mitglieder
  • Beiträge: 311
  • Beigetreten: 04. Oktober 05
  • Reputation: 0

geschrieben 27. März 2006 - 09:42

Halöchen,

ich habe da ein kleines Problem mit Timern. Und zwar habe ich ein Programm das im Paint-Event etwas zeichnet (zum Beipsiel ein 4-Eck). Jetzt habe ich einen Timer genommen der das Ding jede ms um 1 Pixel verschiebt. Das ist aber grottenlangsam, und sobald ich mehr als 3-5 Pixel nehme fängt der an zu "hüpfen", er gleitet quasi nicht mehr smooth ober das Fenster.

Wie kann ich jetzt hinbekommen das das 4-Eck Affenschnell & Smooth ist? Ich habe mich schonmal umgesehen und 4 Timer gefunden (System.Threading.Timer; System.Timers.Timer;System.Windows.Forms.Timer) und weiss jetzt nich wo genau die sich unterscheiden. Ich hehme bisher den Forms.Timer.


Was könnt ihr mir dazu sagen?

MFG Don

(Und wie zum teufel kiann ich meinen Nick ändern? ;-))
0

Anzeige



#2 Mitglied ist offline   Witi 

  • Gruppe: aktive Mitglieder
  • Beiträge: 5.942
  • Beigetreten: 13. Dezember 04
  • Reputation: 43
  • Geschlecht:Männlich
  • Wohnort:Kingsvillage
  • Interessen:Frickeln

geschrieben 27. März 2006 - 13:42

Wie schonmal in einen anderen Post erwähnt: Die .NET-Timer und Events arbeiten im 10ms Bereich. Das heißt, sie werden alle 10ms aufgerufen, so dass es halt zu diesen "Hüpfern" kommt.

Ich weiß leider nicht, ob in diesem Fall der High-Performance Timer was bringt. Musste mal ausprobieren...
0

#3 Mitglied ist offline   DonElTomato 

  • Gruppe: aktive Mitglieder
  • Beiträge: 311
  • Beigetreten: 04. Oktober 05
  • Reputation: 0

geschrieben 27. März 2006 - 14:15

Stimmt sorry, hatte das ja schonmal angerissen.

Was ist denn ein High-Performance Timer. Und vor alles WELCHER von den 3 ist es?
0

#4 Mitglied ist offline   Witi 

  • Gruppe: aktive Mitglieder
  • Beiträge: 5.942
  • Beigetreten: 13. Dezember 04
  • Reputation: 43
  • Geschlecht:Männlich
  • Wohnort:Kingsvillage
  • Interessen:Frickeln

geschrieben 27. März 2006 - 14:22

Guckst du :unsure:
0

#5 Mitglied ist offline   stefanra 

  • Gruppe: aktive Mitglieder
  • Beiträge: 6.208
  • Beigetreten: 13. September 04
  • Reputation: 1

geschrieben 27. März 2006 - 14:24

Da hat wohl jemand einen Filmriss... :unsure:
0

#6 Mitglied ist offline   DonElTomato 

  • Gruppe: aktive Mitglieder
  • Beiträge: 311
  • Beigetreten: 04. Oktober 05
  • Reputation: 0

geschrieben 27. März 2006 - 17:02

Ja sorry, habs voll verpennt. aber das problem was ich damit hatte war, das ich damit zeit messen kann aber nicht einen richtigen Timer bauen kann der nach 0,0000000005 ms ein event aufruft. Zumindest hab ich da so meine Probleme mit.

hat jemand einen Ratschlag?
0

#7 Mitglied ist offline   mo 

  • Gruppe: aktive Mitglieder
  • Beiträge: 1.796
  • Beigetreten: 17. Juni 02
  • Reputation: 0
  • Wohnort:Ulm / BaWü

geschrieben 28. März 2006 - 09:57

Don, windows wie linux sind keine echtzeitbetriebssysteme, man kann damit keine so genauen timerevents machen... was du machen kannst, ist, die vergangene zeit seit dem letzten aufruf abfragen und das event entsprechend der vergangenen zeit verbiegen.
selbst da kannst du dir nicht sicher sein, dass nicht just in diesem moment ein anderer prozess/thread an der reihe ist. schlag dir so superzeitsensible anwendungen lieber gleich wieder aus dem kopf und geh das problem von einer anderen seite an.

Zitat

Jetzt habe ich einen Timer genommen der das Ding jede ms um 1 Pixel verschiebt. Das ist aber grottenlangsam

mach doch einen "zeichentimer", der, wenn aufgerufen rausfindet, wieviel zeit seit dem letzten aufruf vergangen ist, anhand der vergangenen zeit ausrechnet, wie weit die punkte gehüpft sind und diese dann zeichnet.
I'm mó. mo's good twin.
0

#8 Mitglied ist offline   DonElTomato 

  • Gruppe: aktive Mitglieder
  • Beiträge: 311
  • Beigetreten: 04. Oktober 05
  • Reputation: 0

geschrieben 28. März 2006 - 11:03

Das es keine Echzeitsysteme sind weiß ich, nur ich suche nach einer Möglichkeit ein simples Pong zu programmieren was NAHEZU perfekt funzt. Das muss doch irgendwie richtig zu Timen sein !?

Der Vorschlag wäre einen Verusch wert. Nur irgendwie muss das ja gehn. Wie issn das mit 2d Spielen generell?
0

#9 Mitglied ist offline   constructor 

  • Gruppe: aktive Mitglieder
  • Beiträge: 112
  • Beigetreten: 18. April 05
  • Reputation: 0

  geschrieben 28. März 2006 - 13:19

Hi,

evtl. hilft dir DoubleBuffering weiter.

Es gibt die Möglichkeit festzulegen, dass ein Control zuerst in einen Buffer gezeichnet wird. Erst nachdem diese Aktion komplett abgeschlossen ist, wird das Control dargestellt.
Damit kann man das "Flackern" einer Form verhindern - evtl. hilft es auch bei deinem Problem weiter.

private void EnableDoubleBuffer()
{
		SetStyle(ControlStyles.UserPaint, true);
		SetStyle(ControlStyles.AllPaintingInWmPaint, true);
		SetStyle(ControlStyles.DoubleBuffer, true);
}


Hab dir mal ein kleines Beispiel angehängt.
Angehängte Datei  DoubleBuffer.zip (29,92K)
Anzahl der Downloads: 100

Viel Spaß <_<
0

Thema verteilen:


Seite 1 von 1

1 Besucher lesen dieses Thema
Mitglieder: 0, Gäste: 1, unsichtbare Mitglieder: 0