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:

Systemauslastung

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



Anmeldungsdatum: 27.02.2005
Beiträge: 3

BeitragVerfasst am: 12.08.2005, 08:03    Titel: Systemauslastung Antworten mit Zitat

hallo,

ich habe ein programm das aller 15 min werte ausliest und weiterverarbeitet. doch spätestens nach der ersten schlefe geht die systemauslastung nahe hundert prozent dauerhaft. kann mir bitte jemand sagen wie ich das umgehen kann.

im moment habe ich die schleife mit

einer schleife

TIMER ON
ON TIMER(900) GOSUB prog


kann mir bitte jemand sagen wie ich das besser gestalten kann so das die systemauslastung sinkt oder nur dann hoch geht wenn das progr4amm was macht.


dankeschön
_________________
Sei so frei
das es dir egal ist,
wie andere über dich denken.
Du wirst glücklicher sein,
wenn du dir gefällst.
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden
MisterD



Anmeldungsdatum: 10.09.2004
Beiträge: 3071
Wohnort: bei Darmstadt

BeitragVerfasst am: 12.08.2005, 10:27    Titel: Antworten mit Zitat

schau ma in die QB-MonsterFAQ auf QBasic.de, da steht glaub ich irgendwo der Interrupt den du dafür brauchst..
_________________
"It is practically impossible to teach good programming to students that have had a prior exposure to BASIC: as potential programmers they are mentally mutilated beyond hope of regeneration."
Edsger W. Dijkstra
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden
Sebastian
Administrator


Anmeldungsdatum: 10.09.2004
Beiträge: 5969
Wohnort: Deutschland

BeitragVerfasst am: 12.08.2005, 11:57    Titel: Antworten mit Zitat

Hallo.

Glaube nicht, dass das in der MonFAQ ist. dreael hat den Interrupt mal hier im Forum vorgestellt:
http://forum.qbasic.at/viewtopic.php?p=8269#8269

Viele Grüße!
Sebastian
_________________

Die gefährlichsten Familienclans | Opas Leistung muss sich wieder lohnen - für 6 bis 10 Generationen!
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden E-Mail senden Website dieses Benutzers besuchen
MisterD



Anmeldungsdatum: 10.09.2004
Beiträge: 3071
Wohnort: bei Darmstadt

BeitragVerfasst am: 12.08.2005, 12:41    Titel: Antworten mit Zitat

auch gut aber irgendwo gabs ihn eben schonmal zwinkern
_________________
"It is practically impossible to teach good programming to students that have had a prior exposure to BASIC: as potential programmers they are mentally mutilated beyond hope of regeneration."
Edsger W. Dijkstra
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden
Quark48



Anmeldungsdatum: 16.10.2004
Beiträge: 559
Wohnort: Saltendorf a.d. Naab bzw. Teublitz i.d. Oberpfalz / Bayern

BeitragVerfasst am: 12.08.2005, 17:18    Titel: Antworten mit Zitat

Hallöle!

Sieht mir so aus wie ein "DoEvents" für DOS-Programme *g*
_________________
Grüßle, Stefan lächeln
***
Wenn ein Programm auf nem alten Rechner gut läuft, dann läuft´s auf nem neuen erst recht! happy
Ich habe/hatte keine feste Spange und auch keine Schwester. Der Rest stimmt. Es tut mir leid... :-/
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden E-Mail senden Website dieses Benutzers besuchen MSN Messenger
MisterD



Anmeldungsdatum: 10.09.2004
Beiträge: 3071
Wohnort: bei Darmstadt

BeitragVerfasst am: 12.08.2005, 18:12    Titel: Antworten mit Zitat

mein Vorschlag wäre eine Sub namens DoNothing() in die MonFAQ aufzunehmen wo dann der Interrupt drin is durchgeknallt
Dann kann man in seinem programm immer schreiben DoNothing und die systemauslastung geht runter happy
_________________
"It is practically impossible to teach good programming to students that have had a prior exposure to BASIC: as potential programmers they are mentally mutilated beyond hope of regeneration."
Edsger W. Dijkstra
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden
Quark48



Anmeldungsdatum: 16.10.2004
Beiträge: 559
Wohnort: Saltendorf a.d. Naab bzw. Teublitz i.d. Oberpfalz / Bayern

BeitragVerfasst am: 12.08.2005, 22:26    Titel: Antworten mit Zitat

Hallöle!

Aber beachten:
Der 2Fer-Interrupt (oder wie der nnochmal hieß *g*) ist ein WINDOWS-SCHNITTSTELLENINTERRUPT. Kurz: Funktioniert nur unter Windows. DOS ist ein Echtzeitbetriebssystem, das heißt, dass alles (fast zwinkern ) immer mit voller Prozessorpower abläuft lächeln
_________________
Grüßle, Stefan lächeln
***
Wenn ein Programm auf nem alten Rechner gut läuft, dann läuft´s auf nem neuen erst recht! happy
Ich habe/hatte keine feste Spange und auch keine Schwester. Der Rest stimmt. Es tut mir leid... :-/
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden E-Mail senden Website dieses Benutzers besuchen MSN Messenger
Sebastian
Administrator


Anmeldungsdatum: 10.09.2004
Beiträge: 5969
Wohnort: Deutschland

BeitragVerfasst am: 12.08.2005, 23:22    Titel: Antworten mit Zitat

Hallo.

Natürlich geht das nicht unter DOS, aber das wäre ja auch vollkommener Unsinn, denn das Problem gibt es ja nur unter Windows. Ausgenommen über TSR Programme lassen sich unter echtem DOS keine verschiedenen Prozesse gleichzeitig starten. Von daher wäre es ja auch überflüssig, ab und an die Kontrolle über ein DoEvents an andere Prozesse rüberzureichen. durchgeknallt

Von daher sollte man besser zu Anfang des Programms ermitteln, ob man unter DOS oder Windows läuft und dann entweder den Interrupt abfeuern, wenn denn Windows läuft oder drauf verzichten, falls man mal wirklich im echten DOS arbeitet.

Unter FreeBasic muss man das allerdings unter Windows auch wie bei QB mit SLEEP 1 machen, denn sonst bekommt man auch da bei Schleifen eine tierische Prozessorauslastung. Man kann in FreeBasic aber auch auf das uncoole SLEEP verzichten und mittels WinAPI ein DoEvents für FreeBasic bauen. happy

MisterD: Der Vorschlag ist gut. Vielleicht verfasst Nini mal einen Vorgemerkt-Artikel. lächeln

Viele Grüße!
Sebastian

PS: Ich bin ab Morgen früh auch für eine Woche in Urlaub und bin dort nicht erreichbar. eMails kommen aber natürlich an, werden jedoch erst bei Rückkehr gelesen. zwinkern
_________________

Die gefährlichsten Familienclans | Opas Leistung muss sich wieder lohnen - für 6 bis 10 Generationen!
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden E-Mail senden Website dieses Benutzers besuchen
OdinX



Anmeldungsdatum: 29.07.2005
Beiträge: 253
Wohnort: SG Schweiz

BeitragVerfasst am: 15.08.2005, 00:31    Titel: Antworten mit Zitat

wieso machst du das nicht mit einer batch-datei, die alle 15 min dein qb-prog startet?
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden MSN Messenger
Thomas Antoni



Anmeldungsdatum: 12.10.2004
Beiträge: 220
Wohnort: Erlangen

BeitragVerfasst am: 16.09.2005, 20:13    Titel: Artikel für QB-MonsterFAQ Antworten mit Zitat

Kann mir bitte jemand einen Entwurf für den entsprechenden QB-MonsterFAQ-Artikel mit einem Beispielprogramm erstellen?
_________________
+++ Die beliebte QBasic CD-ROM von QBasic.de - 670 MB QBasic-Stuff mit komfortabler HTML-Oberfläche. Für nur 5 EUR bestellbar auf www.antonis.de/qbcdueb.htm +++
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden E-Mail senden Website dieses Benutzers besuchen
Sebastian
Administrator


Anmeldungsdatum: 10.09.2004
Beiträge: 5969
Wohnort: Deutschland

BeitragVerfasst am: 16.09.2005, 20:36    Titel: Antworten mit Zitat

Frage:
Meine CPU-Auslastung schnellt auf 100% hoch, wenn ich ein harmloses QB Programm unter Windows 2000/XP starte. Was kann ich tun?

Antwort:
Windows stellt einen Interrupt bereit, der in etwa so funktioniert wie das aus VisualBasic bekannte DoEvents. Der Interruptaufruf signalisiert dem System, dass das Programm gerade nichts tut und verhindert so, dass Windows zu viel Leistung an das DOS Programm gibt.

Der Interrupt lässt sich so in dein Programm einbauen:
Code:
'DoNothing Beispiel für QuickBasic
'Mit /L starten!
'(c) Andreas "dreael" Meile & Sebastian Steiner

DECLARE SUB DoNothing (ZaehlerAktivieren%)
' $INCLUDE: 'qb.bi'

DIM SHARED dosIntEin AS RegType
DIM SHARED dosIntAus AS RegType
DIM SHARED TempCount%

PRINT "Warte gelassen auf deinen Tastendruck!"

DO
 t$ = INKEY$
 DoNothing 1
LOOP WHILE t$ = ""
PRINT "Fertig! :)"
END

SUB DoNothing (ZaehlerAktivieren%)
TempCount% = TempCount% + 1
IF TempCount% >= 1500 OR ZaehlerAktivieren% = 0 THEN
    TempCount% = 0
    dosIntEin.ax = &H1680
    CALL INTERRUPT(&H2F, dosIntEin, dosIntAus)
END IF
END SUB


Genauere Informationen finden sich hier: http://www.ctyme.com/intr/rb-4530.htm (englisch)

In Schleifen sollte immer DoNothing eingesetzt werden. Handelt es sich nicht um eine einfache Warteschleife wie im Beispiel, sollte der Parameter ZaehlerAktivieren% auf 0 gesetzt werden. Die Verwendung der Zählvariable ist nur nötig, damit der Interrupt in relativ leeren Endlosschleifen auf schnellen Computern nicht zu oft aufgerufen wird, was in wenigen Fällen auch nicht so gut ist. Wird eine Schleife sowieso nur 1 mal pro Sekunde durchlaufen, sollte der Parameter ZaehlerAktivieren% wie bereits beschrieben auf 0 gesetzt werden, da dieser Effekt dann nicht auftritt.

@dreael: Editier den Artikel noch, wenn du Lust hast.
_________________

Die gefährlichsten Familienclans | Opas Leistung muss sich wieder lohnen - für 6 bis 10 Generationen!
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 QBasic. 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