Das deutsche QBasic- und FreeBASIC-Forum Foren-Übersicht Das deutsche QBasic- und FreeBASIC-Forum
Für euch erreichbar unter qb-forum.de, fb-forum.de und freebasic-forum.de!
 
FAQFAQ   SuchenSuchen   MitgliederlisteMitgliederliste   BenutzergruppenBenutzergruppen  RegistrierenRegistrieren
ProfilProfil   Einloggen, um private Nachrichten zu lesenEinloggen, um private Nachrichten zu lesen   LoginLogin
Zur Begleitseite des Forums / Chat / Impressum
Aktueller Forenpartner:

Von Prioritäten und anderen Eigentoren...

 
Neues Thema eröffnen   Neue Antwort erstellen    Das deutsche QBasic- und FreeBASIC-Forum Foren-Übersicht -> Allgemeine Fragen zu FreeBASIC.
Vorheriges Thema anzeigen :: Nächstes Thema anzeigen  
Autor Nachricht
OneCypher



Anmeldungsdatum: 23.09.2007
Beiträge: 802

BeitragVerfasst am: 24.09.2007, 11:21    Titel: Von Prioritäten und anderen Eigentoren... Antworten mit Zitat

Zuletzt hatte ich mir ein Eigentor geschossen:
Mein Programm lief unter windows ruckelnd ab. So dachte ich mir das ich diesem Programm eine höhere Priorität mittels Taskmanager verschaffe.

Hmm.. worauf stell ich das Programm? .. na klar! "Echtzeit" ... .. und was ist dann passiert? na ratet mal...

Das Programm lief mit einem affenzahn! ... fand ich echt klasse lächeln

Leider hatte das Fenster meines Programmes keinen Fokus ...
Und da mein Programm sämtliche CPU-Zeit für sich veranschlagte gelang es mir auch nicht den Fokus wieder auf mein Programm zu lenken und es auf "normalen" wege zu beenden.

Nichts anderes reagierte mehr! Aber das Programm lief weiter und weiter..
(Den PC musste ich neustarten, per hardreset!)

Kann man das irgendwie ein wenig kontrollierbarer machen? Die geschwindigkeitsvorteile, das programm in "Echtzeit" laufen zu lassen, wären echt eine überlegung wert!

Da ich meine programme sowohl unter windows als auch unter linux gerne laufen lassen würde, (ohne große code-änderungen) würde ich eine universelle (win-api-unabhängig) lösung sehr begrüßen!
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden
Sebastian
Administrator


Anmeldungsdatum: 10.09.2004
Beiträge: 5969
Wohnort: Deutschland

BeitragVerfasst am: 24.09.2007, 13:04    Titel: Antworten mit Zitat

Naja, vielleicht wäre die Optimierung des Programms selbst sinnvoller als das Herumdoktern an Prioritäten und Abschusssystemen. zwinkern

Generell solltest du in länger durchzuführenden Schleifen
Code:
SLEEP 1

einbauen. Damit kannst du kurz an das OS zurückmelden, dass es jetzt "auch mal was machen darf". zwinkern
_________________

Die gefährlichsten Familienclans | Opas Leistung muss sich wieder lohnen - für 6 bis 10 Generationen!


Zuletzt bearbeitet von Sebastian am 24.09.2007, 13:06, insgesamt einmal bearbeitet
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden E-Mail senden Website dieses Benutzers besuchen
Jojo
alter Rang


Anmeldungsdatum: 12.02.2005
Beiträge: 9736
Wohnort: Neben der Festplatte

BeitragVerfasst am: 24.09.2007, 13:05    Titel: Antworten mit Zitat

erstmal wäre es natürlich angebracht, den code zu optimieren. wenn du ihn uns zeigst, können wir schon eher helfen zwinkern
_________________
» Die Mathematik wurde geschaffen, um Probleme zu lösen, die es nicht gäbe, wenn die Mathematik nicht erschaffen worden wäre.
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden Website dieses Benutzers besuchen
OneCypher



Anmeldungsdatum: 23.09.2007
Beiträge: 802

BeitragVerfasst am: 24.09.2007, 13:42    Titel: Antworten mit Zitat

Der Code ist eigentlich prima. Da gibts auch nicht viel zu optimieren. Ist einfach nur eine art cursor der kreuz und quer in einer schleife (abbrechbar durch einen tastendruck) über den bildschirm jagt...
Also in etwa so:

Code:
dim x as integer, y as integer
dim sx as integer, sy as integer
screen 17,32
screeninfo sx,sy
cls

x= sx / 2
y = sy /2
do

 x = x + (int(RND*3) -1)
 y = y + (int(RND*3)- 1)
 if x > sx then x = sx
 if y > sy then y = sy
 if x < 0 then x = 0
 if y < 0 then y = 0
 if point (x,y) <> RGB(0,0,0) then
     pset (x,y), RGB(0,0,0)
 else
     pset (x,y), RGB(128,255,128)
 end if
     
loop until inkey <> ""


Das ruckeln rührt bei mir wahrscheinlich von irgendeinem dienst oder einem prozess der ab und zu mal cpu-zeit benötigt.
Desto mehr Priorität ich dem programm gebe desto seltener werden die ruckler.
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden
ytwinky



Anmeldungsdatum: 28.05.2005
Beiträge: 2624
Wohnort: Machteburch

BeitragVerfasst am: 24.09.2007, 18:02    Titel: Antworten mit Zitat

Hi,
..jeder Code läßt sich optimieren, dieser schreit geradezu danach..
Hast du in der Befehlsreferenz mal den Befehl IFF() angesehen?
(In der Referenz steht übrigens auch WIE einer Funktion Werte zugewiesen werden können..)
Was das Ruckeln angeht: Du könntest ja mal in die Do..Loop ein Sleep 1 einbauen..
Gruß
ytwinky
_________________
v1ctor hat Folgendes geschrieben:
Yeah, i like INPUT$(n) as much as PRINT USING..
..also ungefähr so, wie ich GOTO..
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden E-Mail senden Website dieses Benutzers besuchen
Michael712
aka anfänger, programmierer


Anmeldungsdatum: 26.03.2005
Beiträge: 1593

BeitragVerfasst am: 24.09.2007, 18:45    Titel: Antworten mit Zitat

OneCypher hat Folgendes geschrieben:
Der Code ist eigentlich prima. Da gibts auch nicht viel zu optimieren.

...

Das ruckeln rührt bei mir wahrscheinlich von irgendeinem dienst oder einem prozess der ab und zu mal cpu-zeit benötigt.
Desto mehr Priorität ich dem programm gebe desto seltener werden die ruckler.


mit den Augen rollen Also ich weiß nicht, aber wie ytwinky schon sagt, hier gibts einige sachen.
Vor allem pset und point verwenden, eine bessere Variante.

Code:
dim x as integer, y as integer, c As uInteger
dim sx as uinteger, sy as uinteger
Dim scr As Uinteger Ptr

screen 18,24
screeninfo sx,sy
scr = screenptr
cls

x = sx / 2
y = sy / 2


do
   c += 1
   x = x + (int(RND*3) -1)
   y = y + (int(RND*3)- 1)
   
   x = iif(x > sx-1, 0, iif(x < 0, sx-1, x))
   y = iif(y > sy-1, 0, iif(y < 0, sy-1, y))
   
   screenlock
   scr[x + y * sx] = iif(scr[x + y * sx] <> &Hff000000, &Hff000000, &H88ff88)
   screenunlock
   
   if c mod 10000 = 0 Then sleep 1, 1
loop until inkey <> ""


Noch nicht die beste, aber für dich sollte es reichen...
(man kann z.B. machen, dass der screen alle 100 durchläufe upgedatet wird, etc)
_________________
Code:
#include "signatur.bi"
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden E-Mail senden
OneCypher



Anmeldungsdatum: 23.09.2007
Beiträge: 802

BeitragVerfasst am: 24.09.2007, 19:09    Titel: Antworten mit Zitat

HEILIGE MAKARONIE!! .. ICH HÄTTE ECHT NICH GEDACHT DAS MAN DAS NOCH ANDERS SCHREIBEN KANN!! *thx@all* ...

Hmm.. wenn man das sleep rausnimmt kommen die ruckler wieder.. aber das geht doch sicherlich auch auf performance oder?
wofür steht eigentlich der 2. parameter bei
Code:
 sleep 1, 1
?
In meiner docu steht nur der 1. parameter erklärt.
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden
ytwinky



Anmeldungsdatum: 28.05.2005
Beiträge: 2624
Wohnort: Machteburch

BeitragVerfasst am: 24.09.2007, 19:49    Titel: Antworten mit Zitat

http://www.freebasic-portal.de/index.php?s=reftopic&id=400
Vllt solltest du mal deine Hilfe-Datei auf einen aktuellen Stand bringen..
..das geht übrigens auch auf www.freebasic-portal.de..
Gruß
ytwinky
_________________
v1ctor hat Folgendes geschrieben:
Yeah, i like INPUT$(n) as much as PRINT USING..
..also ungefähr so, wie ich GOTO..
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden E-Mail senden Website dieses Benutzers besuchen
PMedia



Anmeldungsdatum: 14.08.2006
Beiträge: 2847

BeitragVerfasst am: 24.09.2007, 19:51    Titel: Antworten mit Zitat


Gratulation, ytwinky, zu Posting #66666, du Magdeburger Deibl Zunge rausstrecken
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden
ytwinky



Anmeldungsdatum: 28.05.2005
Beiträge: 2624
Wohnort: Machteburch

BeitragVerfasst am: 24.09.2007, 20:02    Titel: Antworten mit Zitat

Ach ist das peinlich :blush: verlegen
..und auch noch ausgerechnet jetzt, wo der Teufel sein Unwesen auf einem TrÜbPl treibt..
Ihm sei's gewidmet lachen
Gruß
ytwinky
_________________
v1ctor hat Folgendes geschrieben:
Yeah, i like INPUT$(n) as much as PRINT USING..
..also ungefähr so, wie ich GOTO..
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden E-Mail senden Website dieses Benutzers besuchen
OneCypher



Anmeldungsdatum: 23.09.2007
Beiträge: 802

BeitragVerfasst am: 24.09.2007, 20:20    Titel: Antworten mit Zitat

Bremst
Code:
sleep 1,1
die schleife nicht aus?
Also ich hätte im prinzip nichts dagegen wenn die Anwendung kurzzeitig auf Echtzeit läuft. Aber ohne win-api gehts gar nicht? vor allem nicht plattform unabhängig?
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden
Jojo
alter Rang


Anmeldungsdatum: 12.02.2005
Beiträge: 9736
Wohnort: Neben der Festplatte

BeitragVerfasst am: 24.09.2007, 20:25    Titel: Antworten mit Zitat

Sleep bremst in gewisser Weise, ja, und zwar eine millisekunde. diese millisekunde wird dann dafür ver(sch)wendet, anderen programmen ein bisschen luft zu verschaffen und - ganz wichtig - auch deinem programmfenster! denn ohne das sleep kommt ganz schnell die aufschrift "Programmname [Reagiert Nicht]". In sofern: Bringt nur vorteile, wenn du's des öfteren aufrufst.
_________________
» Die Mathematik wurde geschaffen, um Probleme zu lösen, die es nicht gäbe, wenn die Mathematik nicht erschaffen worden wäre.
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden Website dieses Benutzers besuchen
ytwinky



Anmeldungsdatum: 28.05.2005
Beiträge: 2624
Wohnort: Machteburch

BeitragVerfasst am: 24.09.2007, 20:30    Titel: Antworten mit Zitat

Wenn du möchtest, daß dein Programm sich harmonisch in das Betriebssytem einbindet, dann gib ihm eine Chance..
_________________
v1ctor hat Folgendes geschrieben:
Yeah, i like INPUT$(n) as much as PRINT USING..
..also ungefähr so, wie ich GOTO..
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden E-Mail senden Website dieses Benutzers besuchen
Beiträge der letzten Zeit anzeigen:   
Neues Thema eröffnen   Neue Antwort erstellen    Das deutsche QBasic- und FreeBASIC-Forum Foren-Übersicht -> Allgemeine Fragen zu FreeBASIC. Alle Zeiten sind GMT + 1 Stunde
Seite 1 von 1

 
Gehe zu:  
Du kannst keine Beiträge in dieses Forum schreiben.
Du kannst auf Beiträge in diesem Forum nicht antworten.
Du kannst deine Beiträge in diesem Forum nicht bearbeiten.
Du kannst deine Beiträge in diesem Forum nicht löschen.
Du kannst an Umfragen in diesem Forum nicht mitmachen.

 Impressum :: Datenschutz