|
You last visited: Today at 05:25
Advertisement
Tratsch rund um Autoit / Autoit Talk | kleinere Fragen
Discussion on Tratsch rund um Autoit / Autoit Talk | kleinere Fragen within the AutoIt forum part of the Coders Den category.
12/06/2013, 23:20
|
#1771
|
elite*gold: 280
Join Date: May 2007
Posts: 2,818
Received Thanks: 3,483
|
Quote:
Originally Posted by alpines
Geschwindigkeitsunterschied wolltest du doch heute posten.
|
wenn du von geschwindigkeitsunterschieden nach codelänge sprichst, kann jeder das selbst für sich testen...
bsp:
Code:
$t = TimerInit()
For $i=1 To 1000000
a()
Next
ConsoleWrite(TimerDiff($t)&@CRLF)
$t=TimerInit()
For $i=1 To 1000000
aaaaaaaaaaaaaaaaaaaa()
Next
ConsoleWrite(TimerDiff($t)&@CRLF)
Func a()
Return 0
EndFunc
Func aaaaaaaaaaaaaaaaaaaa()
Return 0
EndFunc
autoit basiert auf einem einfachen runtime interpreter, welcher zur laufzeit jeden einzelnen befehl einliest und ausführt... daraus folgt, das jedes unnötige zeichen in variablen oder funktionen das script verlangsamt...
daraus folgt im übrigen auch, das es absoluter nonsense ist, code durch einen obfuscator sinnlos aufzublähen.
wer vernünftige, effiziente programme schreibt (was in der autoit sektion leider schon selten ist), sollte sich auch damit abfinden, das andere nachvollziehen können was das programm macht.
wer mit der programmierung versucht geld zu verdienen, nutzt keine scriptsprachen (zumindest nicht ausschließlich).
|
|
|
12/06/2013, 23:32
|
#1772
|
elite*gold: 60
Join Date: Aug 2009
Posts: 2,256
Received Thanks: 815
|
Du verstehst es nicht, ich wollte sehen ob der Obfuscator von FlutterShy den Code stark verlangsamt oder nicht. Was bringt einem gutes Obfuscating wenn das Script danach einfach zu langsam ist?
|
|
|
12/07/2013, 10:42
|
#1773
|
elite*gold: 280
Join Date: May 2007
Posts: 2,818
Received Thanks: 3,483
|
Quote:
Originally Posted by alpines
Du verstehst es nicht, ich wollte sehen ob der Obfuscator von FlutterShy den Code stark verlangsamt oder nicht. Was bringt einem gutes Obfuscating wenn das Script danach einfach zu langsam ist?
|
und du verstehst nicht, das jeder obfuscator das script verlangsamt, wie ich gerade versucht habe zu erklären...
das ist der einzige sinn von obfuscators. der code soll durch sinnlose aktionen den leser verwirren und macht dadurch am ende das script langsamer...
viel interessannter wäre mal ein optimierer, welcher sinnlosen code erkennt und durch sinnvollen ersetzt. hierbei ist wie gesagt insbesondere die länge des codes zu beachten...
so sollten sinnlose zeilen wie
Code:
$x = $x+$y
oder
$x = $y+$x
immer ersetzt werden durch
genau wie alle variablen und funktionsnamen möglichst von der länge her minimiert werden sollten...
auch sollten sinnlose funktionen wie AutoItSetOption, welche im inneren nur auf andere funktionen (hier zb Opt), automatisch auf die entsprechende innere funktion abgewandelt werden...
schwer wird es erst sobald "richtig dummer code" ins spiel kommt...
bsp:
sollte ja zb eigentlich immer durch $y=$x+$z+1 ersetzt werden. mit derartigen problemen können aber selbst die besten code optimierer von herstellern wie microsoft etc mehr schlecht als recht umgehen...
leider hilft am ende nichts, wenn der ersteller des codes sich unnötig dumm anstellt...
|
|
|
12/07/2013, 13:05
|
#1774
|
elite*gold: 60
Join Date: Aug 2009
Posts: 2,256
Received Thanks: 815
|
Natürlih hab ich das verstanden, ich wollte nur sehen wie stark der Code verlangsamt wir durch FlutterShys Obfuscator.
|
|
|
12/11/2013, 17:55
|
#1775
|
elite*gold: 95
Join Date: May 2011
Posts: 982
Received Thanks: 189
|
moin,
hatte vorhin bei meinem bot, bei dem 2 pc's über tcp kommunizieren das problem, dass irgendwann nichts mehr übertragen wurde.
zur sicherheit ein signal die ganze zeit senden (auf das der client auch antwortet) und sobald nichts mehr kommt, eine neue verbindung beim server anfragen?
|
|
|
12/11/2013, 18:15
|
#1776
|
elite*gold: 280
Join Date: May 2007
Posts: 2,818
Received Thanks: 3,483
|
Quote:
Originally Posted by butter123
moin,
hatte vorhin bei meinem bot, bei dem 2 pc's über tcp kommunizieren das problem, dass irgendwann nichts mehr übertragen wurde.
zur sicherheit ein signal die ganze zeit senden (auf das der client auch antwortet) und sobald nichts mehr kommt, eine neue verbindung beim server anfragen?
|
am besten du überwachst ständig wsa fehler bei deiner übertragung (@error wird von tcprecv automatisch auf den aktuellen fehlerwert gesetzt)... abgesehen davon ist ein ping natürlich ebenfalls möglich (wenn auch deutlich ungenauer)
Edit:
musteraufbau für server:
Code:
; build an array to save potential clients
Global $clientArray[1]=[0]
;start tcp services and open a listening socket
TCPStartup()
$listenSocket = TCPListen(@IPAddress1, 1337)
;try to keep the main loop as simple as possible
While 1
; Check for connecting Clients
AddClient(TCPAccept($listenSocket))
; receive incoming messages from connected clients
For $i=1 To $clientArray[0]
$rcv = TCPRecv($clientArray[$i], 1024)
If WSAErrorHandling($i) Then ExitLoop ; if any error occured, reset the loop for security reasons
MessageHandling($i, $rcv)
Next
WEnd
Func MessageHandling($socketID, $message)
If $message='' Then Return 0 ; in case of no message directly return 0
; do whatever you want with your messages right here:
ConsoleWrite($clientArray[$socketID]&': '&$rcv&@CRLF)
Return 1
EndFunc
Func WSAErrorHandling($socketID, $error=@error)
Switch $error
Case 0 ; no error
Case 10038 ; invalid socket
ConsoleWrite($clientArray[$socketID]&' is an invalid socket!'&@CRLF)
RemoveClient($socketID)
Case 10054 ; connection reset by peer
ConsoleWrite($clientArray[$socketID]&' resetted the connection!'&@CRLF)
RemoveClient($socketID)
Case Else ; unhandled error
ConsoleWrite('unhandled error occured: '&$error&@CRLF)
EndSwitch
Return $error
EndFunc
Func AddClient($socket)
; if there's a new client, add it to the end of the array
If $socket>0 Then
$clientArray[0]+=1
ReDim $clientArray[$clientArray[0]+1]
$clientArray[$clientArray[0]]=$socket
ConsoleWrite('new connection @ socket: '&$socket&@CRLF)
EndIf
EndFunc
Func RemoveClient($socketID)
; remove the current id and decrement all other ids
$clientArray[0]-=1
For $i=$socketID To $clientArray[0]
$clientArray[$i]=$clientArray[$i+1]
Next
ReDim $clientArray[$clientArray[0]+1]
EndFunc
|
|
|
12/11/2013, 19:05
|
#1777
|
elite*gold: 60
Join Date: Aug 2009
Posts: 2,256
Received Thanks: 815
|
Man sollte es sich abgewöhnen innerhalb von Funktionen auf andere Variablen (außerhalb) den Funktionen zuzugreifen, sowas macht man höchstens in UDFs.
Stattdessen würde ich einfach das Array übergeben + ID oder einfach nur den Socket statt den Array-Index.
Und um einen Array-Index zu löschen würde ich lieber die _ArrayDelete Funktion nutzen.
|
|
|
12/11/2013, 19:22
|
#1778
|
elite*gold: 280
Join Date: May 2007
Posts: 2,818
Received Thanks: 3,483
|
Quote:
Originally Posted by alpines
Man sollte es sich abgewöhnen innerhalb von Funktionen auf andere Variablen (außerhalb) den Funktionen zuzugreifen, sowas macht man höchstens in UDFs.
Stattdessen würde ich einfach das Array übergeben + ID oder einfach nur den Socket statt den Array-Index.
Und um einen Array-Index zu löschen würde ich lieber die _ArrayDelete Funktion nutzen.
|
ich bin kein freund der array udf funktionen...
mit arrays geht man am effizientesten um, wenn der index 0 die anzahl der elemente des arrays enthält. das sorgt dafür, das man keinerlei aussenstehende funktionen benötigt, um beispielsweise elemente zu entfernen oder hinzuzufügen...
schaut man sich die funktion der array.au3 udf an, sieht man wie extrem unperformant das ganze gehalten ist.
weniger funktionsaufrufe -> bessere performance
(spätestens ab mehrdimensionalen arrays, ist die udf ohnehin unbrauchbar)
abgesehen davon scheinst du nicht so ganz den sinn globaler variablen zu verstehen? ein array, welches defakto von wirklich jeder funktion benötigt wird, würdest du also wirklich jeder funktion übergeben und nach dem ablauf neu erstellen lassen um es als rückgabe zu nutzen?
ich bin immer offen für konstruktive kritik... derart unangemessene kommentare hingegen sind wenig hilfreich...
|
|
|
12/11/2013, 19:27
|
#1779
|
elite*gold: 60
Join Date: Aug 2009
Posts: 2,256
Received Thanks: 815
|
Ich würde im Index 0 nicht die Anzahl der Arrayelemente einspeichern, sofern man andere Funktionen auf die Arrays anwenden möchte,
weil man dann immer + 1 rechnen muss und Funktionen (sicherlich nicht alle aber viele) nicht erkennen das im Index 0 die Anzahl enthalten ist.
Wenn man die Anzahl der Elemente haben will dann macht man das eigentlich mit
(für For-Schleifen zumindest) UBound() - 1
Und ja ich sehe das man -1 verwenden muss, aber trotzdem sollte man meiner Meinung nach zumindest UBound verwenden, sonst kann man die Funktion ja auch gleich weglassen und alle darauf programmieren im 1. Eintrag die Größe zu returnen.
Des Weiteren hast du kaum einen Performanceverlust, und wenn dann ist der so klein das er nicht entscheidend ist.
Statt AutoIt würde ich lieber C# verwenden da es performanter ist (wenn du es perfomant haben willst) und dort das Threading benutzen, was nebenbei noch Clienten akzeptieren lässt.
|
|
|
12/11/2013, 19:43
|
#1780
|
elite*gold: 280
Join Date: May 2007
Posts: 2,818
Received Thanks: 3,483
|
Quote:
Originally Posted by alpines
Und ja ich sehe das man -1 verwenden muss, aber trotzdem sollte man meiner Meinung nach zumindest UBound verwenden, sonst kann man die Funktion ja auch gleich weglassen und alle darauf programmieren im 1. Eintrag die Größe zu returnen.
|
genau darauf basiert mein script doch eben <.<
wichtig ist hier aber nicht der verzicht auf die dekrementieriung (hoffentlich nicht sogar subtraktion) sondern der verzicht auf die unnötige ubound funktion.
wie dem auch sei, jeder hat seinen programmier stil... ich bevorzuge es auf jede unnötige funktion zu verzichten (zu denen ubound zweifelsohne gehört) und versuche alle möglichen performance einbußen zu vermeiden.
das problem an den durch autoit von haus aus gestellten funktionen ist, das sie auf die breite masse der anwendungen ausgelegt ist. zudem sind die udfs meist von programmierern anderer sprachen verfasst. hierdurch gehen oftmals die eigentlichen vorteile von autoit verloren.
in typensicheren sprachen wie c#, java, c++, c, ... ist es selbstverständlich nicht möglich jedes array mit zugehöriger größe im ersten index zu speichern. es wäre jedoch schade diesen durch autoit gegebenen vorteil nicht zu nutzen.
|
|
|
12/11/2013, 21:51
|
#1781
|
elite*gold: 95
Join Date: May 2011
Posts: 982
Received Thanks: 189
|
danke schonmal,
würde es beim clienten reichen, tcprecv auf fehler zu überprüfen? oder gibt es auch fehler, bei den tcprecv nicht anschlägt, aber trotzdem keine daten mehr empfangen werden?
der server ist bei mir nicht so das problem, ich muss eher dem clienten sagen: oh es gab einen fehler, verbinde dich neu!
da der server nur eine verbingung haben soll, könnte ich dann einfach die alte überschreiben, falls eine neue angefragt wird.
|
|
|
12/12/2013, 17:42
|
#1782
|
elite*gold: 280
Join Date: May 2007
Posts: 2,818
Received Thanks: 3,483
|
Quote:
Originally Posted by butter123
danke schonmal,
würde es beim clienten reichen, tcprecv auf fehler zu überprüfen? oder gibt es auch fehler, bei den tcprecv nicht anschlägt, aber trotzdem keine daten mehr empfangen werden?
der server ist bei mir nicht so das problem, ich muss eher dem clienten sagen: oh es gab einen fehler, verbinde dich neu!
da der server nur eine verbingung haben soll, könnte ich dann einfach die alte überschreiben, falls eine neue angefragt wird.
|
spätestens beim tcpsend auf einer abgebrochenen verbindung wirst du einen wsa-fehler bekommen.
|
|
|
12/14/2013, 13:00
|
#1783
|
elite*gold: 0
Join Date: Jan 2008
Posts: 456
Received Thanks: 97
|
heyho, hoffe mir kann hier jemand helfen das Scipt zu vervollständigen?
so läuft er, erkennt farbe und rennt hin, es müsste aber noch etwas dazu..
-nachdem er den linksklick gemacht hat soll er 5 sec warten
-sobald er die Pixelfarbe 0xFDC13A gesehen hat soll er die 1 drücken.
-danach 8 sec warten
-nochmal die 1 drücken
-danach warten bis er 0xFCD063 wieder erkennt und von vorne anfang.
While 1
$Farbe = PixelSearch(0,0,@DesktopWidth,@DesktopHeight,0xFCF FEB) ;0xFCD063
If IsArray($Farbe) Then
MouseClick("left",$Farbe[0],$Farbe[1],1,1)
Sleep(250)
ExitLoop
EndIf
WEnd
un bitte noch n hotkey zum beenden setzten wenn das nicht soviel arbeit macht
|
|
|
12/14/2013, 13:18
|
#1784
|
elite*gold: 60
Join Date: Aug 2009
Posts: 2,256
Received Thanks: 815
|
5 Sekunden warten
Code:
Sleep(5000) ;5 * 1000ms
Taste 1 senden oder mit
Code:
ControlSend() ;Parameter nicht vergessen!
Das wirst du doch sicherlich alleine schaffen.
Hotkey
Code:
HotKeySet("{F1}", "StopBot")
Func StopBot()
Exit
EndFunc
|
|
|
12/14/2013, 13:36
|
#1785
|
elite*gold: 0
Join Date: Jan 2008
Posts: 456
Received Thanks: 97
|
Quote:
Originally Posted by alpines
5 Sekunden warten
Code:
Sleep(5000) ;5 * 1000ms
Taste 1 senden oder mit
Code:
ControlSend() ;Parameter nicht vergessen!
Das wirst du doch sicherlich alleine schaffen.
Hotkey
Code:
HotKeySet("{F1}", "StopBot")
Func StopBot()
Exit
EndFunc
|
ok danke dir 
un wie schreibe ich das, wenn der bot warten soll bis er eine farbe erkannt hat un dann erst die 1 drückt?
|
|
|
Similar Threads
|
[Sammelthread]Fragen zu Autoit wie man Hacks herstellt(Autoit) + Antworten
11/16/2011 - Metin2 - 0 Replies
Hallo Liebe Community,
Ich habe diesen Thread aufgemacht weil manche leute mit Autoit nicht mehr weiterkommen wie man Hack herstellt ,ich habe mit schon ein Multihack mit Autoit herstellt das war einfach .Da viele User nicht weiterkommen werden habe ich mich entschieden ein Thread aufzumachen mit Fragen und ich den dann Antworten kann und helfen kann!
------------------------------------------------- ---------------------------
Mein Multihack:...
|
All times are GMT +1. The time now is 05:26.
|
|