Das Notes Forum

Domino 9 und frühere Versionen => ND6: Entwicklung => Thema gestartet von: andrew22 am 13.02.06 - 14:50:11

Titel: Timer
Beitrag von: andrew22 am 13.02.06 - 14:50:11
hi ho

Noch eine andere Frage ...

Wie kann ich denn einen StoppUhrMechanismus erzeugen

sprich das ich z.B. schauen kann wie lang welche Funktion braucht

wahrscheinlich dann im ms Bereich ?!

thx  :-:
Titel: Re: Timer
Beitrag von: Axel am 13.02.06 - 14:53:59
Schau dir mal die Klasse NotesTimer in der Designer-Hilfe an. Mit der müsstest du das realisieren können.


Axel
Titel: Re: Timer
Beitrag von: koehlerbv am 13.02.06 - 20:09:04
Die NotesTimer class nützt das gar nichts, da diese ein im Takt ganzer Sekunden triggerbares Event erzeugt.

LotusScript rechnet prinzipiell im Sekundentakt (wenn ich nichts übersehen habe), für genauere Zeitnahme wäre also das Anzapfen der Systemuhr notwendig.

Bernhard
Titel: Re: Timer
Beitrag von: joringel am 13.02.06 - 23:55:20
Schau dir dies mal an:

http://www.datatribesoftwerks.com/members/datatribe/DatatribeBlog.nsf/archive/20001222-07D2B0?OpenDocument&Start=1&Count=1000&ExpandView

Gruß
Peter
Titel: Re: Timer
Beitrag von: umi am 14.02.06 - 08:55:45
Oder schau mal bei Teamstudio vorbei, die bieten einen Profiler an.
oder lass die FUnktion unter R7 laufen, da ist auch schon ein Profiler dabei :-)
Titel: Re: Timer
Beitrag von: andrew22 am 21.02.06 - 14:33:09
Also diese Stopwatch Klasse ist schon ganz cool Nur leider läuft sie nicht immer so richtig.

Bekomme öfters die Fehlermeldung "Division by Zero"

Was könnte das sein - laut Script Debugger könnte das ein Fehler in der Stopwatch KLasse sein :(  :-:
Titel: Re: Timer
Beitrag von: umi am 21.02.06 - 14:53:11
Könnte sich um einen überlauf handeln :-)
Titel: Re: Timer
Beitrag von: andrew22 am 21.02.06 - 14:55:17
einen Überlauf ;) in wie fern ?!

das die Funktion zu schnell aufgerufen wird oder ?!  :-:
Titel: Re: Timer
Beitrag von: m3 am 21.02.06 - 15:08:48
http://de.wikipedia.org/wiki/%C3%9Cberlauf_%28Hardware%29
Zitat
Als Überlauf bezeichnet man den Umstand, dass das Ergebnis einer Berechnung nicht mehr in den dafür vorgesehenen Speicher passt. Die heute am weitesten verbreiteten Prozessoren führen Berechnungen nicht direkt im Hauptspeicher aus, sondern kopieren die Operanden zuvor in ihre Register, bevor sie darin die Berechnung ausführen. Register haben feste Maximalgrößen für die Zahlen, die in ihnen gespeichert werden können. Werden z.B. zwei Zahlen, die jede für sich kleiner sind, deren Summe jedoch größer ist als das Maximum, addiert, so kommt es zum Überlauf. Infolgedessen ist das Rechenergebnis undefiniert und der Prozessor zeigt den Überlauf mit einem Flag an.
Lernen die Kids heutzutage überhaupt keine Grundlagen mehr??? :'(
Titel: Re: Timer
Beitrag von: flaite am 21.02.06 - 15:21:13
Wieso weist ein Division_by_zero auf einen Speicherüberlauf hin?
Für mich sieht das eher so aus, als würde in der Klasse durch unsachgemässe Benutzung oder durch einen Programmierfehler in der Klasse irgendwo durch 0 geteilt.
Ich würd dir raten, den debugger anzuschmeissen und dir mal anzuschauen unter welchen Bedingungen der Fehler auftritt.

Titel: Re: Timer
Beitrag von: andrew22 am 21.02.06 - 15:31:33
GetAllWatchValues = GetAllWatchValues & Format$(ReportRowArray(intCount).lngRunTime / EventList("Total run time").lngPreviousRunTime, "000.0%") & "   "
         
Diese Zeile ist es die beim debug zurück kommt als fehler sozusagen.
Titel: Re: Timer
Beitrag von: ascabg am 21.02.06 - 15:38:40
Und was stehen in den einzelnen "Variablen" fuer Werte?

ReportRowArray(intCount).lngRunTime = Wert ?
EventList("Total run time").lngPreviousRunTime = Wert ?

Andreas

Titel: Re: Timer
Beitrag von: andrew22 am 22.02.06 - 13:43:39
Was sagen euch diese beiden Ergebnisse ?


seconds     %        calls     secs/call   event
===========================================================================
00000,080   100,0%   0000001   00000,080   Total run time
00000,080   100,0%   0000001   00000,080   Do_QueryWebOpen


seconds     %        calls     secs/call   event
===========================================================================
00000,060   100,0%   0000001   00000,060   Total run time
00000,050   083,3%   0000001   00000,050   Do_QueryWebOpen


Titel: Re: Timer
Beitrag von: koehlerbv am 25.02.06 - 00:13:05
Nichts. Sie haben mit Deinen Fragen wegen "division by zero" gar nichts mehr zu tun.
Ergo: Bitte eine beantwortbare Frage.

Bernhard
Titel: Re: Timer
Beitrag von: flaite am 25.02.06 - 07:32:01
Imho bist du an irgendeinem Punkt gedanklich blockiert.
Das ist nur menschlich.

Also.
Der Computer signalisiert auf diesen Code-Abschnitt:
Code
GetAllWatchValues = GetAllWatchValues & Format$(ReportRowArray(intCount).lngRunTime / EventList("Total run time").lngPreviousRunTime, "000.0%") & "   "
eine division by zero exception.
Dies ist so, weil die Designer von LotusScript ein Teilen durch 0 verboten haben. Ich bin leider nicht so der große Mathematiker. Aber in der Schulmathematik war es nicht anders.

Das bedeutet:
Der Code hinter dem / ergibt 0 und darf nicht 0 ergeben.
Dieses Codefragment ist:
Code
EventList("Total run time").lngPreviousRunTime
Was dies sagen soll, ist nicht nur für dich sondern für alle Betrachter dieses Threads nicht offensichtlich.

Was ist die intelligente Reaktion auf nicht-offensichtliche Phänomene?
Der Versuch das Phänomen auf kleinere Einheiten zu zerlegen, diese zu verstehen und dann evtl. zu einem Gesamtverständnis zu gelangen.

Eine naive Möglichkeit damit umzugehen ist:
Code
Dim divider as Long
divider =  EventList("Total run time").lngPreviousRunTime
if divider = 0.0 then 
print "divider darf nicht 0 sein"
exit sub (oder exit function)
end if 
GetAllWatchValues = GetAllWatchValues & Format$(ReportRowArray(intCount).lngRunTime / divider, "000.0%") & "   "

Als nächstes kannst du den Code studieren und dir überlegen, warum EventList("Total run time").lngPreviousRunTime den Wert 0 ergibt. Und vermutlich findest du einen Weg, die Klasse so zu nutzen, dass dieser Fall unter keinen Umständen auftritt.

nicht schwer

Axel