Hallo zusammen,
für mich als Erstklässler in PureBasic war die zwischenzeitliche Diskussion über Delay(0) zwar ganz interessant, aber am speziellen Thema vorbei, weil Delay(0) eben nicht immer (zuverlässig) im µsec - Bereich arbeitet.
Batze war da schon in meinem Sinne richtig, nur hatte ich ihn zuerst falsch verstanden.
Der Vorschlag von Thomas, die Abfrage in den FOR - NEXT Schleifen weiter nach außen zu legen, wäre natürlich auch gegangen.
Ich habe mich jetzt für folgende Lösung entschieden :
Code: Alles auswählen
Select = WindowEvent()
Case #PB_EventCloseWindow
EventID = #PB_Event_CloseWindow
Abbruch = Abbruch + 1
FreeGadget(95)
Break 12
Case #PB_Event_Gadget
EventID=EventGadgetID()
If EventID = 95
Abbruch = Abbruch + 1
FreeGadget(95)
EndIf
Break 12
Default
If M = Y ; M = lfd.Reihenzähler
Delay(1)
Y = Y + 10000 ; Z = Zähler in 10.000er Schritten
EndIf
EndSelect
Die vorhergehenden Versuche haben folgendes erbracht :
Bei einem Delay(0) ohne Zeitschleife brauchte er für 30.421.755 Reihen 5 Min.
Erstaunlicherweise war er da zwischen den Reihen 20 Mio und 30 Mio bei einer CPU Auslastung von 100% !
Beim gleichen System ganz ohne Delay und ohne Zeitschleife brauchte er ebenfalls 5 Min bei einer Auslastung von rund 85% !
Nach meiner Einschätzung ist Delay(0) also hier nicht unbedingt zu verwenden.
Dann lieber "nur" alle 10.000 Durchläufe eine Ruhepause für Windoofs, aber die dann zuverlässig mit Delay(1) !?
Bei der jetzigen Lösung braucht er rund 04:30 Min. bei einer Auslastung von rund 60 %.
Ich meine, eine Lösung mit der man leben kann.
@jear
Außerdem schreit das Ganze doch danach, die Berechnungen in einer als Thread gestarteten Routine abzuarbeiten. Solange man dort keine Strings anfasst, ist das doch eine einfache und sichere Sache.
Da gehe ich dann ran, wenn ich die Versetzung in die 2. PB-Klasse geschafft habe.
Euch Allen aber ein herzliches Dankeschön für die rege Diskussion und die vielen Anregungen.
Gruß Peter