Vorheriges Thema anzeigen :: Nächstes Thema anzeigen |
Autor |
Nachricht |
amsel
Anmeldungsdatum: 27.02.2005 Beiträge: 3
|
Verfasst am: 12.08.2005, 08:03 Titel: Systemauslastung |
|
|
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 |
|
 |
MisterD

Anmeldungsdatum: 10.09.2004 Beiträge: 3071 Wohnort: bei Darmstadt
|
Verfasst am: 12.08.2005, 10:27 Titel: |
|
|
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 |
|
 |
Sebastian Administrator

Anmeldungsdatum: 10.09.2004 Beiträge: 5969 Wohnort: Deutschland
|
|
Nach oben |
|
 |
MisterD

Anmeldungsdatum: 10.09.2004 Beiträge: 3071 Wohnort: bei Darmstadt
|
Verfasst am: 12.08.2005, 12:41 Titel: |
|
|
auch gut aber irgendwo gabs ihn eben schonmal  _________________ "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 |
|
 |
Quark48

Anmeldungsdatum: 16.10.2004 Beiträge: 559 Wohnort: Saltendorf a.d. Naab bzw. Teublitz i.d. Oberpfalz / Bayern
|
Verfasst am: 12.08.2005, 17:18 Titel: |
|
|
Hallöle!
Sieht mir so aus wie ein "DoEvents" für DOS-Programme *g* _________________ Grüßle, Stefan
***
Wenn ein Programm auf nem alten Rechner gut läuft, dann läuft´s auf nem neuen erst recht!
Ich habe/hatte keine feste Spange und auch keine Schwester. Der Rest stimmt. Es tut mir leid... :-/ |
|
Nach oben |
|
 |
MisterD

Anmeldungsdatum: 10.09.2004 Beiträge: 3071 Wohnort: bei Darmstadt
|
Verfasst am: 12.08.2005, 18:12 Titel: |
|
|
mein Vorschlag wäre eine Sub namens DoNothing() in die MonFAQ aufzunehmen wo dann der Interrupt drin is
Dann kann man in seinem programm immer schreiben DoNothing und die systemauslastung geht runter  _________________ "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 |
|
 |
Quark48

Anmeldungsdatum: 16.10.2004 Beiträge: 559 Wohnort: Saltendorf a.d. Naab bzw. Teublitz i.d. Oberpfalz / Bayern
|
Verfasst am: 12.08.2005, 22:26 Titel: |
|
|
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 ) immer mit voller Prozessorpower abläuft  _________________ Grüßle, Stefan
***
Wenn ein Programm auf nem alten Rechner gut läuft, dann läuft´s auf nem neuen erst recht!
Ich habe/hatte keine feste Spange und auch keine Schwester. Der Rest stimmt. Es tut mir leid... :-/ |
|
Nach oben |
|
 |
Sebastian Administrator

Anmeldungsdatum: 10.09.2004 Beiträge: 5969 Wohnort: Deutschland
|
Verfasst am: 12.08.2005, 23:22 Titel: |
|
|
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.
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.
MisterD: Der Vorschlag ist gut. Vielleicht verfasst Nini mal einen Vorgemerkt-Artikel.
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.  _________________
Die gefährlichsten Familienclans | Opas Leistung muss sich wieder lohnen - für 6 bis 10 Generationen! |
|
Nach oben |
|
 |
OdinX

Anmeldungsdatum: 29.07.2005 Beiträge: 253 Wohnort: SG Schweiz
|
Verfasst am: 15.08.2005, 00:31 Titel: |
|
|
wieso machst du das nicht mit einer batch-datei, die alle 15 min dein qb-prog startet? |
|
Nach oben |
|
 |
Thomas Antoni

Anmeldungsdatum: 12.10.2004 Beiträge: 220 Wohnort: Erlangen
|
Verfasst am: 16.09.2005, 20:13 Titel: Artikel für QB-MonsterFAQ |
|
|
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 |
|
 |
Sebastian Administrator

Anmeldungsdatum: 10.09.2004 Beiträge: 5969 Wohnort: Deutschland
|
Verfasst am: 16.09.2005, 20:36 Titel: |
|
|
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 |
|
 |
|