Register for your free account! | Forgot your password?

Go Back   elitepvpers > Coders Den > AutoIt
You last visited: Today at 05:04

  • Please register to post and access all features, it's quick, easy and FREE!

Advertisement



Sleep() - Test

Discussion on Sleep() - Test within the AutoIt forum part of the Coders Den category.

Reply
 
Old   #1
 
Achat's Avatar
 
elite*gold: 528
Join Date: Jan 2012
Posts: 2,127
Received Thanks: 2,403
Sleep() - Test

Hi epvp!

Mir ist aufgefallen, dass die sleep() Funktion sehr ungenau ist.
Siehe dazu auch meinen Beitrag hier:


Um eine Fehlfunktion meines Computers auszuschließen, möchte ich die Sleep Funktion mit euch testen:

Code:
[noparse]
#region ;**** Directives created by AutoIt3Wrapper_GUI ****
#AutoIt3Wrapper_UseX64=n
#AutoIt3Wrapper_Res_requestedExecutionLevel=asInvoker
#endregion ;**** Directives created by AutoIt3Wrapper_GUI ****
#include <Array.au3>
_SleepTest()
Func _SleepTest()
	Local $hTimer
	Local $aSleep[501][3], $sTable
	ProgressOn('epvpSleepTest', 'Fortschritt', '', -1, -1, 16)
	For $i = 0 To 500
		$hTimer = TimerInit()
		Sleep($i)
		$aSleep[$i][1] = TimerDiff($hTimer)
		$aSleep[$i][2] = Round(TimerDiff($hTimer) / $i * 100) & '%'
		$aSleep[$i][0] = $i
		ProgressSet($i / 501 * 100, 'Sleep(' & $i & ')')
	Next
	ProgressOff()
	$sTable = 'Ergebnisse des epvpSleepTests[spoiler][table="head"]' & 'Sleep | reale Sleepzeit in ms | Übereinstimmung %' & @CRLF
	For $i = 0 To UBound($aSleep) - 2
		$sTable &= $aSleep[$i][0] & '|' & $aSleep[$i][1] & '|' & $aSleep[$i][2] & @CRLF
	Next
	$sTable &= $aSleep[UBound($aSleep) - 1][0] & '|' & $aSleep[UBound($aSleep) - 1][1] & '|' & $aSleep[UBound($aSleep) - 1][2] & @CRLF & '[/Table][/Spoiler]'
	ClipPut($sTable)
	MsgBox(0x40000 + 64, 'epvpSleepTest', 'Die Ergebnisse des Sleep-Tests wurden als Tabelle in die Zwischenablage kopiert und stehen nun zum direkten Einfügen in epvp bereit.')
EndFunc   ;==>_SleepTest
[/noparse]
Script einfach ausführen und die Tabelle hier einfügen .

Ergebnisse des epvpSleepTests

MfG

€:

Quote:
Originally Posted by butter123 View Post


wie wärs damit?


Code:
[noparse]
#region ;**** Directives created by AutoIt3Wrapper_GUI ****
#AutoIt3Wrapper_UseX64=n
#AutoIt3Wrapper_Res_requestedExecutionLevel=asInvoker
#endregion ;**** Directives created by AutoIt3Wrapper_GUI ****
#include <Array.au3>

Global $hDll = DllOpen('ntdll.dll')

_SleepTest()
Func _SleepTest()
	Local $hTimer
	Local $aSleep[501][3], $sTable
	Local $iAccuracy = 5
	ProgressOn('epvpSleepTest', 'Fortschritt', '', -1, -1, 16)
	For $i = 0 To 500
		$hTimer = TimerInit()
		For $ia = 1 To $iAccuracy
			_HighPrecisionSleep($i * 1000, $hDll)
		Next
		$aSleep[$i][1] = TimerDiff($hTimer)
		$aSleep[$i][1] = $aSleep[$i][1] / $iAccuracy
		$aSleep[$i][2] = Round($aSleep[$i][1] / $i * 100) & '%'
		$aSleep[$i][0] = $i
		ProgressSet($i / 501 * 100, '_HighPrecisionSleep(' & $i & ')')
	Next
	ProgressOff()
	$sTable = 'Ergebnisse des epvpHighPrecisionSleepTests[spoiler][table="head"]' & '_HighPrecisionSleep | reale Sleepzeit in ms | Übereinstimmung %' & @CRLF
	For $i = 0 To UBound($aSleep) - 2
		$sTable &= $aSleep[$i][0] & '|' & $aSleep[$i][1] & '|' & $aSleep[$i][2] & @CRLF
	Next
	$sTable &= $aSleep[UBound($aSleep) - 1][0] & '|' & $aSleep[UBound($aSleep) - 1][1] & '|' & $aSleep[UBound($aSleep) - 1][2] & @CRLF & '[/Table][/Spoiler]'
	ClipPut($sTable)
	MsgBox(0x40000 + 64, 'epvpHighPrecisionSleepTest', 'Die Ergebnisse des HighPrecisionSleep-Tests wurden als Tabelle in die Zwischenablage kopiert und stehen nun zum direkten Einfügen in epvp bereit.')
EndFunc   ;==>_SleepTest

; #FUNCTION#;===============================================================================
;
; Name...........: _HighPrecisionSleep()
; Description ...: Sleeps down to 0.1 microseconds
; Syntax.........: _HighPrecisionSleep( $iMicroSeconds, $hDll=False)
; Parameters ....:  $iMicroSeconds		- Amount of microseconds to sleep
;				   $hDll  - Can be supplied so the UDF doesn't have to re-open the dll all the time.
; Return values .: None
; Author ........: Andreas Karlsson (monoceres)
; Modified.......:
; Remarks .......: Even though this has high precision you need to take into consideration that it will take some time for autoit to call the function.
; Related .......:
; Link ..........;
; Example .......; No
;
;;==========================================================================================
Func _HighPrecisionSleep($iMicroSeconds, $hDll = False)
	Local $hStruct, $bLoaded
	If Not $hDll Then
		$hDll = DllOpen("ntdll.dll")
		$bLoaded = True
	EndIf
	$hStruct = DllStructCreate("int64 time;")
	DllStructSetData($hStruct, "time", -1 * ($iMicroSeconds * 10))
	DllCall($hDll, "dword", "ZwDelayExecution", "int", 0, "ptr", DllStructGetPtr($hStruct))
	If $bLoaded Then DllClose($hDll)
EndFunc   ;==>_HighPrecisionSleep
[/noparse]
Ergebnisse des epvpHighPrecisionSleepTests
Achat is offline  
Thanks
3 Users
Old 02/06/2013, 22:59   #2
 
MegaCoolblood's Avatar
 
elite*gold: 367
Join Date: Oct 2011
Posts: 233
Received Thanks: 630
Ergebnisse des epvpSleepTests
MegaCoolblood is offline  
Thanks
1 User
Old 02/06/2013, 23:02   #3
 
omer36's Avatar
 
elite*gold: 0
Join Date: Mar 2009
Posts: 2,317
Received Thanks: 1,255
das sind millisec. ....glaub kaum, dass daraus irgendwas schief laufen würde..

Ergebnisse des epvpSleepTests

€ sieht aber seltsamm aus bei mir..
bis sleep(10) hat alles etwa 9ms
von 11-20 alles 19ms
von 21-30 alles 29ms
usw..
omer36 is offline  
Thanks
2 Users
Old 02/06/2013, 23:04   #4

 
Njahs's Avatar
 
elite*gold: 574
Join Date: Nov 2010
Posts: 2,498
Received Thanks: 726
Njahs is offline  
Thanks
1 User
Old 02/06/2013, 23:29   #5
 
Achat's Avatar
 
elite*gold: 528
Join Date: Jan 2012
Posts: 2,127
Received Thanks: 2,403
Quote:
Originally Posted by omer36 View Post
das sind millisec. ....glaub kaum, dass daraus irgendwas schief laufen würde..
Besonders die Ungenauigkeit bei <10 von bis zu 1000(!)% ist ärgerlich

Ich habe in einer While Schleife eine Function, die immer aufgerufen wird, die Function benötigt zur Ausführung zwischen 0.01ms und 0.007 ms.
Code:
sleep(1) ;1 Millisekunde
wäre für diese Schleife natürlich perfekt, um eine Überlastung der CPU zu verhindern.

Es handelt sich hier um einen Aimbot.
Das Spiel läuft mit 62.5 fps, also kommt ca. alle 16 ms ein neues Bild.
Und wenn AutoIt dann 10ms pausiert anstatt 1, dann verzögert sich alles und die Effizienz (AutoIt o.O) des Programms sinkt.

Ich habe das in meiner Schleife so gelöst:
Code:
func _Func()
;...
local $i=0
;....
while 1
;.....
If Mod($i, 500) = 0 Then Sleep(1)
$i+=1
wend
endfunc
So optimal ist das zwar nicht, aber "Not macht erfinderisch"

Quote:
Originally Posted by http://web.slzm.de/blog/wp-content/uploads/AutoIt_leicht_gemacht_2009-07-11.pdf
Es würde also irgendwann zum Crash führen?

Vielleicht finden wir ja eine Alternative zu sleep()

MfG
Achat is offline  
Thanks
1 User
Old 02/07/2013, 00:08   #6


 
Requi's Avatar
 
elite*gold: 3570
The Black Market: 244/0/0
Join Date: Dec 2012
Posts: 13,044
Received Thanks: 8,252
Ergebnisse des epvpSleepTests
Requi is offline  
Thanks
1 User
Old 02/07/2013, 00:22   #7
 
butter123's Avatar
 
elite*gold: 95
Join Date: May 2011
Posts: 982
Received Thanks: 189


wie wärs damit?
butter123 is offline  
Thanks
1 User
Old 02/07/2013, 01:38   #8
 
lolkop's Avatar
 
elite*gold: 280
Join Date: May 2007
Posts: 2,818
Received Thanks: 3,483
spielt man das spiel auf etwas höherer präzisionsebene weiter, so zeigt sich ein recht klares bild, über die sleep funktion:

Code:
$genauigkeit = 5
For $x=0 To 500
	$summe = 0
	For $i=0 To $genauigkeit
		$t = TimerInit()
		Sleep($x)
		$summe += TimerDiff($t)
	Next
	ConsoleWrite($x&'ms -> '&$summe/$genauigkeit&'ms'&@CRLF)
Next
je höher wir hier die genauigkeit setzen, umso realistischer werden die ergebnisse (umso länger dauert der test aber natürlich)... wenn man das ganze mal überblickt, ergibt sich ein recht genaues bild, in welchen stufen autoit's sleep funktion arbeitet.

hier mal eine auflistung meiner ergebnisse für sleeps von 0-50ms mit genauigkeit 100:

was man an meinem beispiel schön erkennt ist, das es keinen unterschied macht, ob ich bei mir sleep(1) oder sleep(11) ausführe, da beide exakt die selbe wartezeit verursachen.
lolkop is offline  
Thanks
1 User
Old 02/07/2013, 08:03   #9


 
Lawliet's Avatar
 
elite*gold: 2
Join Date: Jul 2009
Posts: 14,456
Received Thanks: 4,685
Eine Alternative wäre evl. Eine eige Sleep Funktion über nen Timer zu implementieren. Da ich gerade am Handy bin kann ich allerdings nicht testen, ob diese dann bessere Ergebnisse liefern würde.
Lawliet is offline  
Thanks
1 User
Old 02/07/2013, 09:21   #10
 
Der-Eddy's Avatar
 
elite*gold: 205
Join Date: Nov 2008
Posts: 67,906
Received Thanks: 19,505
Soweit ich weiß geht Sleep irgendwelche Berechnungen am Prozessor durch sodass auf PCs mit einem besseren Prozessor die reale Sleep Zeit kürzer ist als auf anderen
Quote:
Originally Posted by Lawliet! View Post
Eine Alternative wäre evl. Eine eige Sleep Funktion über nen Timer zu implementieren. Da ich gerade am Handy bin kann ich allerdings nicht testen, ob diese dann bessere Ergebnisse liefern würde.
Dann muss man aber immernoch mit Verzögerungen rechnen da die Befehle selber auch noch mal Zeit verbrauchen
Der-Eddy is offline  
Old 02/07/2013, 16:46   #11
 
.SkyneT.'s Avatar
 
elite*gold: 273
Join Date: Sep 2010
Posts: 1,831
Received Thanks: 786
Quote:
Originally Posted by Der-Eddy View Post
Soweit ich weiß geht Sleep irgendwelche Berechnungen am Prozessor durch sodass auf PCs mit einem besseren Prozessor die reale Sleep Zeit kürzer ist als auf anderen
Nein.
So sieht das vielleicht auf kleinen AVR Prozessoren aus aber sicher nicht
bei der CPU eines PC's.

Vereinfacht wird der CPU gesagt:
"Für foo.exe wird die nächsten x ms nichts berechnet"

Das die Zeit die hier gemessen wird von vielen anderen Faktoren als
Sleep() alleine abhängt sollte auch erwähnt werden..
.SkyneT. is offline  
Thanks
1 User
Old 02/12/2013, 16:54   #12
 
elite*gold: 50
Join Date: Dec 2012
Posts: 650
Received Thanks: 221
epvpSleepTest
SeYz is offline  
Old 02/12/2013, 17:03   #13
 
YatoDev's Avatar
 
elite*gold: 50
Join Date: Sep 2012
Posts: 3,841
Received Thanks: 1,462
Ergebnisse des epvpSleepTests
YatoDev is offline  
Old 02/12/2013, 17:09   #14
 
Schlüsselbein's Avatar
 
elite*gold: 0
Join Date: Feb 2013
Posts: 1,137
Received Thanks: 869
Sleep garantiert dir nur, für die angegebene Zeit _mindestens_ zu warten. Die Beispiele, wo Sleep() weniger lang als angefordert wartet, müssten Messfehler sein.

Du arbeitest mit keinem µC (bei dem man exakt sagen kann, wie viele ms/µs ein bestimmter Befehl brauch), sondern hast OS, Scheduler etc. mit an Board.
Schlüsselbein is offline  
Old 02/12/2013, 18:59   #15
 
Achat's Avatar
 
elite*gold: 528
Join Date: Jan 2012
Posts: 2,127
Received Thanks: 2,403
Quote:
Originally Posted by butter123 View Post


wie wärs damit?
Hab den 1. Post aktualisiert

Sieht leider auch nicht viel besser aus.

MfG

€:

Quote:
Originally Posted by Lawliet! View Post
Eine Alternative wäre evl. Eine eige Sleep Funktion über nen Timer zu implementieren.
Deine Func interessiert mich.

MfG
Achat is offline  
Reply


Similar Threads Similar Threads
KingClem Amazing D3D! [Fast All | Spread | 2h Test Time! fking big!] [3h Test Chams]
01/28/2015 - WarRock Hacks, Bots, Cheats & Exploits - 71 Replies
OUTDATED Screenshot: http://h4.abload.de/img/kingclembigd3downagetihrg k.png Screenshot II: http://kingclem.co.de/images/homo.png Viruscan: VirusTotal - Free Online Virus, Malware and URL Scanner



All times are GMT +1. The time now is 05:04.


Powered by vBulletin®
Copyright ©2000 - 2026, Jelsoft Enterprises Ltd.
SEO by vBSEO ©2011, Crawlability, Inc.
This site is protected by reCAPTCHA and the Google Privacy Policy and Terms of Service apply.

Support | Contact Us | FAQ | Advertising | Privacy Policy | Terms of Service | Abuse
Copyright ©2026 elitepvpers All Rights Reserved.