Wie Skript warten lassen?

11/01/2010 11:40 FizzeBu#1
So, hab ein kleines Problem. Ich bin wieder mal dabei einen Bot zu schreiben, der soll jetzt aber professioneller werden als die letzten. Ich will, dass der Bot die Tasten sendet und dazwischen wartet. Sleep pausiert das ganze Skript und Timer werden mit If abgechecked. Ich sehe keine Möglichkeit zu warten ohne das ganze Skript zu pausieren... ich hoffe es findet sich eine Möglichkeit=)
11/01/2010 12:31 lolkop#2
einfach erstmal eine timervariable initialisieren (autoit setzt sie automatisch 1).
Code:
Dim $timer
dann in deiner hauptschleife einfach immer abfragen, ob die timerlaufzeit größer als x ist. wenn ja dann führe deine aktion aus, und setzte die $timer variable auf die aktuelle pc laufzeit.
Code:
While 1
    [...]
    If TimerDiff($timer) > x Then
        ; aktionen
        $timer = TimerInit()
    Endif
WEnd
11/01/2010 12:44 FizzeBu#3
Neinneinnein, du hast mich falsch verstanden, ich weiß wie Timer funktionieren, ich will aber keinen benutzen, weil man sie mit If abfragen muss, und If pausiert auch das ganze Skript. Aber danke für die schnelle Antwort=)
11/01/2010 12:55 V8II#4
Hm!?
Meinst du das ein teil des scripts mit dem timer abgefragt werden soll und ein anderer Teil normal weiter lauft auch wenn der timer noch nicht ausgelaufen ist !? Sorry ich verstehe nicht was du meinst.
11/01/2010 13:18 lolkop#5
if blockiert garnichts. nur sleep, wait und schleifen befehle können das script blockieren
11/01/2010 13:19 FizzeBu#6
Das Skript soll eine Aktion ausführen, ohne andere Aktionen des Skripts zu behindern, darum will ich eine Möglichkeit zu eine Zeit zu warten, ohne das ganze Skript zu pausieren.

If blockiert nicht die ganze Zeit wie Sleep, aber If blockiert solange bis es geguckt hat ob die Bedingung erfüllt ist. Wenn ich jetzt mit einer Whileschleife abfrafe, ob die Bedingung erfüllt wurde, blockiert es das SKript auch.
11/01/2010 13:27 Shadow992#7
Quote:
Originally Posted by FizzeBu View Post
Das Skript soll eine Aktion ausführen, ohne andere Aktionen des Skripts zu behindern, darum will ich eine Möglichkeit zu eine Zeit zu warten, ohne das ganze Skript zu pausieren.

If blockiert nicht die ganze Zeit wie Sleep, aber If blockiert solange bis es geguckt hat ob die Bedingung erfüllt ist. Wenn ich jetzt mit einer Whileschleife abfrafe, ob die Bedingung erfüllt wurde, blockiert es das SKript auch.
Das was du meinst nennt sich Multithreading und das ist atm in AutoIt nicht möglich. Dafür müsstest du schon eine andere Sprache lernen.

Btw. Send-Bots sind nie professionel.
11/01/2010 13:32 lolkop#8
-.- du fragst einfach alles in deiner hauptschleife ab...

wenn du eine extra schleife für die abfrage machst, ist das das selbe wie sleep...

Edit:
Quote:
Originally Posted by Shadow992 View Post
Das was du meinst nennt sich Multithreading und das ist atm in AutoIt nicht möglich. Dafür müsstest du schon eine andere Sprache lernen.

Btw. Send-Bots sind nie professionel.
sry aber das ist nun wirklich blödsinn...

Edit2:

hier vielleicht mal ein kleines sehr einfaches beispiel:
Code:
Dim $timer[5] ; 5 timer initialisieren
Dim $wait_time[5] = [1000,2000,5000,10000,20000] ; 5 Intervallzeiten Definieren
;funktion1 -> 1s, funktion2 -> 2s, funktion3 -> 5s, funktion4 -> 10s, funktion5 -> 20s

;schleife laufen lassen, in der alle funktionen parallel getimt laufen
While 1
	For $i=0 To 4
		If TimerDiff($timer[$i]) > $wait_time[$i] Then
			ConsoleWrite("funktion"&$i+1&" wird nun aufgerufen"&@CRLF)
			$timer[$i] = TimerInit()
		EndIf
	Next
	Sleep(5) ; dem cpu eine rastzeit von 5ms gönnen :P
WEnd
hier werden wie man leicht sieht, 5 funktionen in 5 verschiedenen intervallen aufgerufen...
keine funktion blockiert hierbei eine andere.
11/01/2010 15:51 FizzeBu#9
Quote:
Originally Posted by Shadow992 View Post
Btw. Send-Bots sind nie professionel.
Hmm, welche Bots sind den professionell? Pixelbots oder was? Ich versuche es so gut wie möglich zu machen, inklusive Pointer, was ir total auf den SAck geht, weil ich noch nicht richtig eingearbeitet bin-.-

Quote:
Originally Posted by lolkop View Post
-.- du fragst einfach alles in deiner hauptschleife ab...
GUI...
11/01/2010 16:30 Shadow992#10
Quote:
Originally Posted by lolkop View Post
-.- du fragst einfach alles in deiner hauptschleife ab...
[...]
hier werden wie man leicht sieht, 5 funktionen in 5 verschiedenen intervallen aufgerufen...
keine funktion blockiert hierbei eine andere.
Quote:
Originally Posted by FizzeBu View Post
Neinneinnein, du hast mich falsch verstanden, ich weiß wie Timer funktionieren, ich will aber keinen benutzen, weil man sie mit If abfragen muss, und If pausiert auch das ganze Skript. Aber danke für die schnelle Antwort=)
Muss ich noch dazu schreiben, dass er keine Timer benutzen will?
Außerdem was ist wenn die 2 Funktionen durchgehend aufgerufen werden müssen, ohne die anderen dabei zu "blockieren"?
Vielleicht ist die eine Funktion eine komplexe und große Berechnung, die 2. beinhaltet auch ein paar Berechnungen und die letzte Funktion ist dann ein GuiGetMessage(...).
Wie bitte willst du das mit Timern lösen, ohne dass sich die 3 Funktionen gegenseitig "blockieren"?

Ich lasse mich natürlich gerne berichtigen, aber Aussagen von Leuten als totaler Blödsinn darzustellen, obwohl diese zumindest unter bestimmten Bedingungen wahr/möglich sind, ist echt nicht die feine englische Art.

Quote:
Originally Posted by FizzeBu View Post
Hmm, welche Bots sind den professionell? Pixelbots oder was? Ich versuche es so gut wie möglich zu machen, inklusive Pointer, was ir total auf den SAck geht, weil ich noch nicht richtig eingearbeitet bin-.-
Packetbots und Memorybased Bots sind professioneller, du solltest aber unbedingt, falls möglich, anstatt mit Send mit ControlSend arbeiten.
Das sollte jetzt aber keine Diskussion darüber werden was professionel is und was nicht, ich fand die Aussage nur etwas komisch. ;)
11/01/2010 16:35 lolkop#11
Quote:
Originally Posted by FizzeBu View Post
GUI...
öhm was ändert bitte ein gui an der sache? -.-
setz dir halt noch ein gui mit ins script wennde das unbedingt brauchst...

bsp:
Code:
Dim $timer[5] ; 5 timer initialisieren
Dim $wait_time[5] = [1000,2000,5000,10000,20000] ; 5 Intervallzeiten Definieren
;funktion1 -> 1s, funktion2 -> 2s, funktion3 -> 5s, funktion4 -> 10s, funktion5 -> 20s
Dim $checkbox[5] ; 5 Checkboxen Vorbereiten

GUICreate('Gui', 400, 60, -1, -1, 0x114A0000)
For $i=0 To 4
	$checkbox[$i] = GUICtrlCreateCheckbox('funktion'&$i+1, 8+$i*80, 10)
Next


;schleife laufen lassen, in der alle funktionen parallel getimt laufen
While 1
	Switch GUIGetMsg()
		Case -3
			Exit
		Case Else
			For $i=0 To 4
				If GUICtrlRead($checkbox[$i])=1 And TimerDiff($timer[$i]) > $wait_time[$i] Then
					ConsoleWrite("funktion"&$i+1&" wird nun aufgerufen"&@CRLF)
					$timer[$i] = TimerInit()
				EndIf
		 	Next
	EndSwitch
WEnd
11/01/2010 16:47 lolkop#12
Quote:
Originally Posted by Shadow992 View Post
Muss ich noch dazu schreiben, dass er keine Timer benutzen will?
Außerdem was ist wenn die 2 Funktionen durchgehend aufgerufen werden müssen, ohne die anderen dabei zu "blockieren"?
Vielleicht ist die eine Funktion eine komplexe und große Berechnung, die 2. beinhaltet auch ein paar Berechnungen und die letzte Funktion ist dann ein GuiGetMessage(...).
Wie bitte willst du das mit Timern lösen, ohne dass sich die 3 Funktionen gegenseitig "blockieren"?

Ich lasse mich natürlich gerne berichtigen, aber Aussagen von Leuten als totaler Blödsinn darzustellen, obwohl diese zumindest unter bestimmten Bedingungen wahr/möglich sind, ist echt nicht die feine englische Art.
also ich wage mal stark zu bezweifeln, das er in seinem einfachen send/click bot irgendwelche großen berechnungen tätigen muss.

desweiteren habe ich bisher noch keine rechnung gefunden die so komplex ist, das sie mein script für mehr als 500ms blockieren könnte. (ich rede hier nicht von irgendwelchen primzahl berechnungs algorythmen, die niemand in autoit umsetzen sollte, oder irgendwelchen auf primitivstem wege gescripteten rekusiv geschriebenen fibonacci folgen berechnungen.)

selbst wenn man einen mit hoher warscheinlichkeit nicht innerhalb der lebenszeit der erde endenen algorythmus ins script setzt (zb bruteforcer), was in autoit sowieso schwachsinn wäre, kann man auch den so ins script setzen, dass das script von ihm nicht behindert wird.

natürlich lassen sich sachen durch mehrere threads schön gesondert behandeln (priorisierung etc), das heist aber nicht, dass es probleme gibt die man nicht ohne threads lösen kann.

Edit:
Sry für den doppelpost, aber wollte nicht den obigen ontopic post mit offtopic gelaber versehen
11/01/2010 19:44 FizzeBu#13
Quote:
Originally Posted by Shadow992 View Post
Packetbots und Memorybased Bots sind professioneller, du solltest aber unbedingt, falls möglich, anstatt mit Send mit ControlSend arbeiten.
Das sollte jetzt aber keine Diskussion darüber werden was professionel is und was nicht, ich fand die Aussage nur etwas komisch. ;)
Mach ich ja, und natürlich arbeite ich mit ControlSend oO, ich dachte das müsste ich nicht erwähnen.

Quote:
Originally Posted by lolkop View Post
also ich wage mal stark zu bezweifeln, das er in seinem einfachen send/click bot irgendwelche großen berechnungen tätigen muss.
Danke, dass du mich als Noob hinstellst und über mich redest als wäre ich gebannt oder so(@Shadow,too)-.-

Lieutz ich will doch nur wissen ob es eine Möglichkeit gibt, eine Aktion zu verzögern ohne Timer und Sleep=)
11/01/2010 20:29 omer36#14
es würde vllt mehr helfen, wenn du mal beschreibst, was genau du eig. vor hast...
das einzige, was dein programm blockt ist sleep(soweit ich weiß) mit timer sollte es eig. gehen...


Quote:
eine Aktion zu verzögern ohne Timer und Sleep=)
if "dies und das" = "irgentwas" then ....

so verzögerste auch was...
kommt halt drauf an, was du überhaupt vor hast
11/01/2010 20:40 FizzeBu#15
Quote:
Originally Posted by omer36 View Post
es würde vllt mehr helfen, wenn du mal beschreibst, was genau du eig. vor hast...
das einzige, was dein programm blockt ist sleep(soweit ich weiß) mit timer sollte es eig. gehen...



if "dies und das" = "irgentwas" then ....

so verzögerste auch was...
kommt halt drauf an, was du überhaupt vor hast
Davon rede ich ja auch die ganze Zeit=)

Ich mache einen Bot, mit ner Whileschleife, in der Whileschleife sendet er x dann wartet er ne zufällige zeit(time-zufall, schon gemacht=) dann sendet er y und das Ganze ohne Sleep und If TimerDif=)