Sleep() - Test

02/12/2013 19:27 Schlüsselbein#16
Quote:
Deine Func interessiert mich.
Auch hier sollte wieder der Scheduler im Weg stehen.
08/17/2013 23:27 SpieleHacksInfo#17
Hm ich finde das ganze jetzt nicht so extrem. Man sieht, dass Richtung Ende sich einschaukelt und genauer wird. Ich finde das um ehrlich zu sein jetzt nicht so extrem wie du [Only registered and activated users can see links. Click Here To Register...] beschrieben hast, aber für Perfektionisten ist [Only registered and activated users can see links. Click Here To Register...] sicherlich gut.
Ergebnisse des epvpSleepTests
Edit:// Sry für den Push. Zu müde/dumm um auf das Datum zu schauen.
08/17/2013 23:42 FacePalmMan#18
das hier ist das präziseste was man mit autoit (ohne dlls) machen kann.
Code:
Func SleepA($MS)
	$TI=TimerInit()
	While TimerDiff($TI)<$MS
	WEnd
EndFunc
08/18/2013 14:56 alpines#19
@FacePalmMan, das ist schon richtig aber trotzdem falsch.

Eine Sleep-Funktion dient dazu die CPU zu schonen + das Script zu pausieren.
Nimm bei deinem Script mal SleepA(10000) und schau im TaskMgr nach, deine CPU wird ausgelastet was bei einer Sleep(10000) nicht passiert.

Desweiteren möchte ich mal anmerken wer bitteschön einen Sleep von ein paar Mikrosekunden braucht? Wenn man Sleep einsetzen muss dann ist in vielen Fällen das Script falsch gecoded, also finde ich das hier eigentlich unnötig.
08/18/2013 19:32 FacePalmMan#20
Quote:
Originally Posted by alpines View Post
@FacePalmMan, das ist schon richtig aber trotzdem falsch.

Eine Sleep-Funktion dient dazu die CPU zu schonen + das Script zu pausieren.
Nimm bei deinem Script mal SleepA(10000) und schau im TaskMgr nach, deine CPU wird ausgelastet was bei einer Sleep(10000) nicht passiert.

Desweiteren möchte ich mal anmerken wer bitteschön einen Sleep von ein paar Mikrosekunden braucht? Wenn man Sleep einsetzen muss dann ist in vielen Fällen das Script falsch gecoded, also finde ich das hier eigentlich unnötig.
wenn man diese methode nur für sehr kleine delays benutzt (z.b bei programmen die vom timing her sehr präzise arbeiten müssen), wofür es auch gedacht ist , lastet es den pc nicht so sehr aus.
einige tests haben gezeigt, dass diese SleepA funktion die ich oben gepostet habe nur um schlappe 7000 nanosekunden (=7 mikrosekunden=0.007 millisekunden=) zu langsam geht.
wenn ihr den test selber ausprobieren wollt:
Code:
$C=1
For $i=1 To 1000
	$SA=SleepA(1)
	$C+=$SA
	ToolTip($i)
Next
MsgBox(0,"","Durchschnittlich verbrauchte zeit:"&($C-1)/1000&@CRLF&"Abweichung:"&(($C-1)/1000-1)*1000*1000&" Nanosekunden")

Func SleepA($MS)
	$TI=TimerInit()
	While TimerDiff($TI)<$MS
	WEnd
	Return TimerDiff($TI)
EndFunc
08/18/2013 20:21 alpines#21
Mir fallen keine Beispiele ein wo man auf nanosekundengenau warten muss. Dir etwa?
08/19/2013 12:25 aj1987#22
Ich hab da auch was...
Code:
#include <array.au3>
; #FUNCTION# ====================================================================================================================
; Name ..........: _sleep
; Description ...: 
; Syntax ........: _sleep([$iTime = 0])
; Parameters ....: $iTime               - [optional] An integer value. Default is 0.
; Return values .: None
; Author ........: aj1987
; Modified ......: 
; Remarks .......: 
; Related .......: 
; Link ..........: 
; Example .......: No
; ===============================================================================================================================
Func _sleep($iTime = 0)
	Local $timer = TimerInit()
	Local $taken
	While $taken < $iTime
		$taken = TimerDiff($timer)
	WEnd
	Return $taken
EndFunc   ;==>_sleep

Local $TimeTable[1]
For $i=1 To 100 Step 1
	_ArrayAdd($TimeTable,_sleep($i))
Next
_ArrayDisplay($TimeTable,"TimeTable")
Kannst ja mal testen und bescheid sagen...
Bei mir is das ziemlich genau...
08/19/2013 12:37 alpines#23
Das gleiche wurde schon getestet, erwähnt und ist suboptimal, denn:

- die CPU / der Prozess wird nicht pausiert
- die CPU muss die While / WEnd Schleife durchrechnen.
08/19/2013 12:41 aj1987#24
Geht es hier nun um die Genauigkeit der Sleepfunktion oder um die Prozessorlast?

Denn die Genauigkeit ist hier doch gegeben... oder sehe ich das falsch?
08/19/2013 12:52 alpines#25
Wenn man es streng nimmt dann ist das keine Sleep-Funktion sondern einfach nur WasteTime o. ä..

Wenn dir Beispiele einfallen wo man so genau wie möglich sleepen muss dann nenn mir bitte paar damit mir ein Licht aufgeht.

Meiner Meinung nach braucht man sowieso nie die Sleep-Funktion, weil wenn man sie verwenden muss dann in vielen Fällen einfach falsch gecodet wurde.
08/19/2013 13:02 aj1987#26
Ich hab keine Ahnung wo man das so genau bruachen sollte, war bei mir auch noch nie der Fall.
Aber das steht auch nicht zur Debatte, es wird eine genaue möglichkeit gesucht etwas zu unterbrechen und ein Sleep ist zwar ein Stillstand eines Prozesses aber ein WoT ist doch genau so gut...
Ich hab selber auch nur selten Sleeps in Verwendung weil ich auf den ohnehin schon geringen Speed von Autoit angewiesen bin...
Aber wie siehts eigentlich aus wenn man den DLLCall direkt ausführt und nicht die Sleep-Funktion aufruft, bringt das was?
08/23/2013 18:02 CantShutMyMouth#27
Ergebnisse des epvpHighPrecisionSleepTests