Merkwürdiges Flackern
Übersicht

![]() |
ToeBBetreff: Merkwürdiges Flackern |
![]() Antworten mit Zitat ![]() |
---|---|---|
Ich habe dafür keine Erklärung, immer wenn ich ein Programm mit Blitz3D Kompiliere, und dann ein zweites starte, flackern diese die ganze zeit, und zwar nur wenn ich z.B. Flip benutze. Das Programm sieht dann so aus :
Code: [AUSKLAPPEN] Graphics 400, 300, 16, 2
SetBuffer BackBuffer( ) Repeat Text 0, 0, "Hallo !"+Rand( 999 ) Flip Cls Until KeyHit( 1 ) End Einmal gestartet, geht wunderbar, danach noch einmal, flackert. Ich benutze WindowsXP (x32) Professional (2002) - Servicepack 3. Gafiktreiber alle installiert (die neusten) und auch sonst eigl. alles auf dem neusten stand. Ich hoffe ihr könnt mir helfen ![]() mfg ToeB |
||
Religiöse Kriege sind Streitigkeiten erwachsener Männer darum, wer den besten imaginären Freund hat.
Race-Project - Das Rennspiel der etwas anderen Art SimpleUDP3.0 - Neuste Version der Netzwerk-Bibliothek Vielen Dank an dieser Stelle nochmal an Pummelie, welcher mir einen Teil seines VServers für das Betreiben meines Masterservers zur verfügung stellt! |
![]() |
Eingeproggt |
![]() Antworten mit Zitat ![]() |
---|---|---|
Ich glaub wir haben ein neues Argument gefunden, weshalb man keinesfalls auf einen Timer verzichten soll ![]() Ich hab bereits nach deinem Beitrag im anderen Forum (wo es um die Sache mit IDEal - Anwendung 2mal starten ging) das mitn Flackern ausprobiert. Und bei mir (Ebenfalls Win XP 32Bit, SP3) war da nix zu sehen. Jetzt mit deinem Testcode flackert es. Und bau ich n Timer (50Hz) ein, flackerts nimma. mfG, Christoph. |
||
Gewinner des BCC 18, 33 und 65 sowie MiniBCC 9 |
![]() |
ToeB |
![]() Antworten mit Zitat ![]() |
---|---|---|
Ah ja... war mein Fehler^^ hatte nen Timer drin (bei meinem eigentlichen Code, der andere code hier war das ganze nur schnell hingeschrieben) aber Flip 1 nicht Flip 0 -.-
Danke dir ! mfg ToeB |
||
Religiöse Kriege sind Streitigkeiten erwachsener Männer darum, wer den besten imaginären Freund hat.
Race-Project - Das Rennspiel der etwas anderen Art SimpleUDP3.0 - Neuste Version der Netzwerk-Bibliothek Vielen Dank an dieser Stelle nochmal an Pummelie, welcher mir einen Teil seines VServers für das Betreiben meines Masterservers zur verfügung stellt! |
![]() |
Midimaster |
![]() Antworten mit Zitat ![]() |
---|---|---|
Das Problem ist der FLIP-Befehl
ohne den Zusatz einer 0 wartet der in einer Schleife auf den VSync. Innerhalb dieser Schleife verbrät er 99% der Systemleistung und läßt anderen Programmen keine Luft mehr zum "atmen". Jeder jetzt nebenher laufende Prozess kommt da ins Stolpern. In dieser Test-Umgebung startest Du kein WORD mehr und selbst der Windows-Tasmanager schafft es kaum hoch. Startest Du das Programm 2x, dann bringen sie sich gegenseitig zum Stolpern. Aber nicht erst jetzt taucht das Problem auf, Du bemerkst es erst jetzt. Du kannst die Behinderung aber auch schon daran erkennen, dass der Zähler im Programm in einer Sekunde nur bis 60 hochzählen kann, obwohl er dazu 100% der Leistung braucht. Ein CreateTimer(60) gibt nun jede 1/60 Sekunde für 59/60 Sekunden an das Betriebssystem ab. Dadurch kommen andere Programm wieder zum Zug. Auch ein parallell gestartetes 2.Programm zählt nun brav bis 60. Allerdings musst Du den Flaschenhals FLIP in FLIP 0 umwandeln, sonst nutzt es nix! DELAY würde übrigens auch helfen. Hier wäre sogar eine Zählen bis 1000 in einer Sekunde möglich. Und die Systemleistung bleibt trotzdem niedrig! BlitzBasic: [AUSKLAPPEN] Graphics 400, 300, 16, 2 |
||
![]() |
Pummelie |
![]() Antworten mit Zitat ![]() |
---|---|---|
Das beim warten auf VSync die Leistung nicht mehr an das System freigegeben wird, war vlt. mal vor 10 Jahren so...
Inzwischen gibt es aber die Leistung zurück, und führt keine Repeat;Until-Schleife selbst mehr aus. Normalerweise jedenfalls. Wenn ein Prog mit Flip 1 100& CPU brauchst, dann ist der PC entweder extrem lahm, oder alt (oder beides^^). |
||
It's done when it's done. |
![]() |
Midimaster |
![]() Antworten mit Zitat ![]() |
---|---|---|
@Pummelie:
Kannst Du das beweisen, oder redest Du nur so daher, ohne es ausprobiert zu haben? Hier mal mein "Beweiscode": BlitzBasic: [AUSKLAPPEN] Graphics 400, 300, 16, 2 |
||
- Zuletzt bearbeitet von Midimaster am Mi, März 16, 2011 21:12, insgesamt einmal bearbeitet
![]() |
aMulSieger des Minimalist Compo 01/13 |
![]() Antworten mit Zitat ![]() |
---|---|---|
Stimme Midimaster zu. Kurzer Test zeigt, dass Flip(1) einen meiner vier Kerne zu 100% nutzt.
Wenn ich stattdessen einen timer benutzte bin ich bei 7%(ein richtiges Programm, kein leerer Testcode natürlich). Das wird wohl kaum Zufall sein. |
||
Panic Pong - ultimate action mashup of Pong and Breakout <= aktives Spiele-Projekt, Downloads mit vielen bunten Farben!
advASCIIdraw - the advanced ASCII art program <= aktives nicht-Spiele-Projekt, must-have für ASCII/roguelike/dungeon-crawler fans! Alter BB-Kram: ThroughTheAsteroidBelt - mit Quelltext! | RGB-Palette in 32²-Textur / Farbige Beleuchtung mit Dot3 | Stereoskopie in Blitz3D | Teleport-Animation Screensaver |
![]() |
Midimaster |
![]() Antworten mit Zitat ![]() |
---|---|---|
Das ist auch der Grund, warum Pummelie glaubt, auf seinem Rechner würde nicht auf den VSync gewartet. Die wahrscheinlich vielen) anderen Kerne gaukeln ihm eine "unter 100%"-Auslastung vor.
Der Prozessorkern muss erst noch gebaut werden, der bei FLIP 1 nicht in die Knie geht! ![]() |
||
![]() |
Pummelie |
![]() Antworten mit Zitat ![]() |
---|---|---|
Der Code den du gepostet hast...
PS: 120 Herz Monitor |
||
It's done when it's done. |
![]() |
DaysShadow |
![]() Antworten mit Zitat ![]() |
---|---|---|
Glaubs doch einfach.
Hier nochmal in BlitzMax: BlitzMax: [AUSKLAPPEN] SuperStrict Im Vollbild habe ich 25% Auslastung, also ist ein Kern auf 100%. Im Fenstermodus ist es auf 0, liegt aber wohl daran, dass Windows da was regelt, was es im Vollbild nicht tut. Mein Rechner ist weder langsam noch alt und um einiges schneller als deiner, also was willst du hier erzählen? Führe das Programm doch mal im Vollbild aus und wechsle auf den Desktop während es weiter läuft und zeig dann mal die Auslastung. |
||
Blessed is the mind too small for doubt |
![]() |
Pummelie |
![]() Antworten mit Zitat ![]() |
---|---|---|
Im Vollbild habe ich 0-5%...
Wieviel Leistung hat ein Kern bei dir? |
||
It's done when it's done. |
![]() |
Noobody |
![]() Antworten mit Zitat ![]() |
---|---|---|
Was ist denn mit dem aggressivem Unterton hier?
Ist es so schwer zu glauben, dass nicht jeder einzelne Rechner auf diesem Planeten gleich auf ein Stück Code reagiert? |
||
Man is the best computer we can put aboard a spacecraft ... and the only one that can be mass produced with unskilled labor. -- Wernher von Braun |
![]() |
ZaP |
![]() Antworten mit Zitat ![]() |
---|---|---|
Bei ATi Grafiktreibern kann man VSync aus/an erzwingen, vielleicht ist das hier der Fall? Denke bei den Grünlingen geht das auch. | ||
Starfare: Worklog, Website (download) |
![]() |
Midimaster |
![]() Antworten mit Zitat ![]() |
---|---|---|
Hallo Pummmelie,
wie ich sehe, stimmtst Du mir nun zu. Danke! Und Du belegst das dann ja auch noch gleich mit dem Screenshot! bei einem 60Hz Monitor hast du alle 16msec einen VSync, bei einem 120Hz-Monitor alle 8msec. Das bedeutet, dass eigentlich einer der Kerne auf 100% geht. Vielleicht hast Du einen Rechner, der die Last geschickt auf mehrere Kerne umschichtet. Vielleicht ist aber auch die Grafikkarte in der Lage die VSync-Anfrage zu handle'n? Aber für die Masse der Rechner (vor allem die der Kunden) gilt: Fakt ist und bliebt Du verlierst durch jeden FLIP pro Schleife 8 msec. Bei einer Hauptschleife OHNE WaitTimer() summiert sich dieser "Verlust" auf 120x 8msec = 960msec pro Sekunde. Die restl. 40msec stehen dem eigentlichen Programm zur Verfügung. Auf einem Single-Core müssen alle anderen Prozesse sich davon noch irgendwie was abringen. Bei einer Hauptschleife mit CreateTimer(60) sind immerhin nur 60x8msec=480msec verloren. Nach jedem VSync gehören dann die folgenden 8msec dem Betriebssystem bis dann der TIMER() die Kontrolle an das Programm zurückreicht. Dem bleiben aber auch hier nur 40msec von der ganzen Sekunde übrig. Die korrekte Arbeitsweise ist die mit FLIP 0 und einem TIMER oder DELAY. |
||
Übersicht


Powered by phpBB © 2001 - 2006, phpBB Group