1. Dashboard
  2. Mitglieder
    1. Letzte Aktivitäten
    2. Benutzer online
    3. Team
    4. Mitgliedersuche
  3. Forenregeln
  4. Forum
    1. Unerledigte Themen
  • Anmelden
  • Registrieren
  • Suche
Alles
  • Alles
  • Artikel
  • Seiten
  • Forum
  • Erweiterte Suche
  1. AutoIt.de - Das deutschsprachige Forum.
  2. Mitglieder
  3. Marthog

Beiträge von Marthog

  • 2 Fragen bezüglich Schnelligkeit und Interpreter

    • Marthog
    • 20. November 2012 um 22:08

    In AutoIt wird der lesbare Code in Tokens zerlegt, das sind u.A. die einzelnen Funktionsnamen, Strings, Zahlen, Variablenname, Keywords, Operatoren (+ - , [ ...) Diese Tokenliste wird dann Stück für Stück eingelesen, dabei muss aber während der Ausführung bestimmt werden, in welcher Reihenfolge die Befehle ausgeführt werden.

    Beispiel
    [autoit]

    7*(5+3)

    [/autoit]


    wird sozusagen in die Tokens

    • Zahl: 7
    • Multiplikation
    • Klammer auf
    • Zahl: 5
    • Plus
    • Zahl: 3
    • Klammer zu


    zerlegt. Beim Ausführen muss der Interpreter daraus die richtie Reihenfolge der Berechnung bestimmen.

    Lua z.B. hat eine assemblerähnliche Sprache, in die das erstmal übersetzt und dann in bytecode weiterumgewandelt wird. Dieser Bytecode wird dann interpretiert.
    Dadurch kann Befehl für Befehl abgearbeitet werden und der Interpreter muss nicht mehr die Reihenfolge bestimmen.

    Beispiel
    [autoit]

    7*(5+3)

    [/autoit]


    wird umgewandelt zu

    • Addiere 5 und 3
    • Multipliziere Ergebnis mit 7

    Zudem verhalten sich die lokalen Variablen anders. In AutoIt gibt es eine Liste mit Variablennamen und Werten, die bei jedem Verwenden einer Variable durchsucht werden muss. In Lua werden die lokalen Variablen zu Indices auf dem Stack und können dadurch schneller wieder ausgelesen werden.
    Außerdem wird Lua ein bisschen optimiert, sodass aus den 7*(5+3) vor der Ausführung der Wert 65 berechnet werden würden.


    Java funktioniert so ähnlich, aber hat festgelegte Typen und wahrscheinlich ist der Optimierer hier ausschlaggebend, denn bei einer Programmanalyse würde er herausfinden, dass die innere Schleife absolut unnütz ist, denn da wird bis 100000000 gezählt, die Variable aber außerhalb dieser Schleife nie verwendet. Dazu habe ich auch etwas in den von dir verlinkten Thread geschrieben am Beispiel C++, das auch sagenhafte 0 Millisekunden gekommen ist.

  • Vollbild - wie bei Firefox

    • Marthog
    • 20. November 2012 um 15:08

    Der Style $WS_POPUP entfernt Rand und Titelleiste. $WS_POPUPWINDOW ist so ähnlich, lässt aber einen 1 Pixel breiten Rand.

  • index.html mit autoit starten

    • Marthog
    • 16. November 2012 um 19:14

    Ich verstehe nicht genau, was du machen willst.
    Wenn du die html-Datei öffnen willst, verwende ShellExecute. Der Befehl funktioniert wie ein Doppelklick auf die Datei.

    EDIT: gnarf

  • Happy Birthday chesstiger (15) und Xenobiologist (33)

    • Marthog
    • 12. November 2012 um 20:42

    Herzlichen Glückwunsch! :party:

  • [gelöst] Mittelpunkt einer Fläche im 3D Raum

    • Marthog
    • 5. November 2012 um 20:23

    Warum über Schnittpunktberechnung? Bei einem Rechteck ist der Mittelpunkt immer auf Höhe der halben Seitenlängen. Der vierte Punkt ist dann auch egal.

    M: Mittelpunkt
    A: erster Punkt
    AB: Strecke von A zu B: B-A
    AD: Strecke von A zu D: D-A

    Code
    M = A + (AB + AD)/2
  • Make-Grafik hat Geburtstag!

    • Marthog
    • 1. November 2012 um 18:15

    Herzlichen Glückwunsch!

  • Geschwindigkeit (AutoIt, Blitz3D(BlitzBasic), FreeBASIC, Java, Python, Lua, Ruby, ActionScript)

    • Marthog
    • 26. Oktober 2012 um 22:20

    Ich habe eben gerade mal meinen eigenen, sich in Entwicklung befindenden, AutoIt-Compiler ausprobiert.
    Erst ergab sich kein Geschwindigkeitsgewinn gegenüber AutoIt, nach einer Optimierungsmaßnahme sank die Dauer aber auf ca. 900 ms.
    Zu der Zeit brauchten die AutoIt-skripte ca. 9140 ms, also ungefähr 10-fache Geschwindigkeit.

  • Geschwindigkeit (AutoIt, Blitz3D(BlitzBasic), FreeBASIC, Java, Python, Lua, Ruby, ActionScript)

    • Marthog
    • 26. Oktober 2012 um 19:49

    Zum Vergleich: Mein PC kommt mit AutoIt auf 17388.64 ms.

    "C++11"
    C
    #include <chrono>
    #include <iostream>
    
    
    using namespace std::chrono;
    
    
    int main()
    {
    	double diff = 0.0;
    	for (int a=1; a<=4; ++a)
    	{
    		high_resolution_clock::time_point timer = high_resolution_clock::now();
    		int i=0;
    		while (i!=100000000)
    			i += 10;
    
    
    		duration<double> time_span = duration_cast<duration<double>>(high_resolution_clock::now() - timer);
    		diff += time_span.count();
    		std::cout<<a<<" Durchlauf: "<<time_span.count()*1000<<"ms\n";
    	}
    	std::cout<<"Durchschnitt: "<<diff/4*1000<<" ms\n";
    }
    Alles anzeigen

    Compiled mit gcc (allerdings ältere Version).

    1. Durchlauf: 33 ms
    2. Durchlauf: 33 ms
    3. Durchlauf: 32ms
    4. Durchlauf: 32 ms
    Durchschnitt: 32.5 ms

    Compiler-option -O3 gesetzt (beste Optimierungsstufe).
    Alles 0 ms
    Durch den Compileroptimierer wird die gesamte innere Schleife entfernt, da sie unnötige Berechnungen enthält und außerdem die äußere Schleife "entfaltet", sodass die 4 identischen Befehle hintereinander abgespielt werden. Dadurch werden auf unnötige jump-Befehle verzichtet.
    Als weitere Optionen könnte man noch -fno-rtti -fexpensive-optimizations setzten. Diese würden den Optimierungsgrad noch weiter erhöhen (hier unnötig).

    Auf chrono könnte man verzichten und stattdessen WinAPI-Code verwenden, mit dem man auch über 1 ms Genauigkeit erreicht.

  • Letztes Zeichen (ein chr(12)) aus Textfile löschen

    • Marthog
    • 23. Oktober 2012 um 18:17
    Zitat von x0r


    bei ner Datei mit 1.86mb Größe dauert meins um die 49sec.

    Deine Lösung ist auch denkbar ungünstig, da:
    1. Für _FileCountLines wird die Datei gelesen und gezählt.
    2. Für FileReadLine wird ein Teil der Datei eingelesen, nach dem Zeilenende gesucht und sie dann geschlossen.
    3. Zudem verwendest du viele Funktionen, die die Lesbarkeit deutlich erschweren.
    4. Es wird abwechselnd gelesen und geschrieben, Ein- und Ausgabe muss also eine andere Datei sein.

    Die Methode von Blowcake ist da deutlich besser.

    Die, von AspirinJunkie hat natürlich den Vorteil, dass es nicht nur schnell ist, sondern die Dateigröße nicht für die Geschwindigkeit relevant ist, und auch Arbeitsspeicher gespart wird. Man kann z.B. auch 10 GB große Dateien bearbeiten, auch mit einem 32-bit System.

  • Multiplayer-Spiel mit Irrlicht

    • Marthog
    • 19. Oktober 2012 um 14:19
    Zitat von J@ik

    @m-obi - Da fragst du den falschen^^ Ich nehm(in autoit) halt immer Dim :)

    Davon kann ich abraten, denn Dim kann sich genauso wie eine Variable, die ohne vorherige Deklaration verwendet wird, unterschiedlich verhalten.

    &quot;Beispiel&quot;
    [autoit]

    Func Foo($baz)
    Dim $bar = $baz+1
    ConsoleWrite($bar)
    EndFunc

    [/autoit] [autoit][/autoit] [autoit]

    Foo(2)
    MsgBox(0, "", $bar) ; würde Fehler geben
    $bar = 7
    MsgBox(0, "", $bar) ; gibt 7 aus
    Foo(99)
    MsgBox(0, "", $bar) ; Gibt 100 aus

    [/autoit]

    Wie man sieht, wird $bar beim ersten Aufruf von Foo lokal erstellt und nach Funktionsende gelöscht. Danach exisitert aber die globale Variable $bar und diese wird verändert. So kann es vorkommen, dass ein Fehler auftritt, aber man an der falschen Stelle nach der Ursache sucht.
    Ich mache das bei größeren Projekten immer so: Globale Variablen werden außerhalb einer Funktion mit Global, in Funktionen werden alle Variablen mit Local deklariert. Leider ist AutoIt, was die Variablendeklaration angeht nicht besonders einheitlich.

  • Irrlicht.au3 - Aufruf integriert in ein anderes Fenster

    • Marthog
    • 18. Oktober 2012 um 20:55

    Im Prinzip kann Irrlicht in allen Windows-Standart-GUIs als Child eingebunden werden, also auch in AutoIt und ich habe das auch schonmal testweise gemacht. Damals habe ich aber nicht die Irrlicht-UDF verwendet, sondern eine eigene DLL geschrieben.

    Bei der Irrlicht-UDF scheint die Funktion aber nicht vorhanden zu sein.

  • AutoIT Code schützen

    • Marthog
    • 11. Oktober 2012 um 22:13

    Grundsätzlich gilt: Was der Prozessor lesen kann, können auch manche Menschen lesen. Das macht vollständigen Schutz unmöglich. Beim Sichern des Codes ist es hauptsächlich wichtig, es so schwer zu machen, dass die Skriptkiddies es nicht mehr schaffen, also die Programme und Tutorials nicht mehr reichen.

  • Buttons neugezeichnet?

    • Marthog
    • 11. Oktober 2012 um 12:16

    Wenn du dir das mal genau anguckst und z.B. einen sehr großen Button erstellt, siehst du dass der 3D-Effekt nur ein Trick ist, indem der Button in zwei Farben eingefärbt ist. Drückt man ihn, wird die eine Farbe verändert und die Grenze verschiebt sich weiter nach unten.
    Wenn man genau hinsieht, erkennt man, dass viele Elemente nach der gleichen Methode funktionieren.
    Untersucht man alle Elemente, erkennt man, dass diese recht einfach gehalten sind, aber trotzdem noch gut aussehen, und die Effekte alle nur einfache Tricks sind. In Anbetracht der Tatsache, dass der Text sowieso erst beim Erstellen gezeichnet wird und das GUI auch für größere Auflösungen funktionieren soll, ist neue Generierung praktischer als vorher erstelte Bilder. Der Haken von Checkboxes und die Pfeile von Scrollbars sind aber vielleicht auch als Bild gespeichert.

  • Funktionen

    • Marthog
    • 9. Oktober 2012 um 23:25

    %d und %i sind gleich.
    In C gibt es noch die Funktion scanf, die nach der gleichen Syntax funktioniert, wie printf, nur wird eingelesen. Dabei ist %d immer dezimal, bei %i kann auch oktal oder hexadezimal eingelesen werden. Scanf ist in AutoIt aber nicht enthalten.

  • Vereinfachte Klasse für Zeichnen in 2D (OpenGL)

    • Marthog
    • 7. Oktober 2012 um 23:10

    glut.h gehört zu OpenGL. Du musst es schon installieren und auch gegebenenfalls den Pfad in den projectsettings eintragen.

  • Probleme mit Dll-Datei

    • Marthog
    • 3. Oktober 2012 um 15:07

    Es reicht so:

    Code
    extern "C" __declspec(dllexport) int Summe(int a, int b)
    {
       return a+b;
    }
    [autoit]


    $hDll = DllOpen(@ScriptDir & "\Dll.dll")
    $ret = DllCall($hDll, "int:cdecl", "Summe", "int", 5, "int", 4)
    MsgBox(0, $ret, @error)

    [/autoit]
  • Arrays "freigeben"

    • Marthog
    • 24. September 2012 um 21:20
    Zitat von Acanis


    Beim Verkleinern ist ReDim also auf jeden Fall die bessere Wahl.
    Trotzdem muss ich, da ich ja nicht das letzte Element abschneide, muss ich ja ein Hilfsarray kopieren.

    In der Regel sind die nativen Funktionen und Standard-UDFs besser, solange sie genau das tun, für was du sie brauchst.
    Bei der UDF wird nicht in ein Hilfsarray kopiert.
    Da wird einfach ab dem zu löschenden index alles um einen verschoben und danach das array um 1 verkleinert.

  • Ini-Datei vor Lesern schützen

    • Marthog
    • 24. September 2012 um 21:14

    Komplett sicher gibt es nicht.

    Ini-Dateien sind zum lesen und verändern da, deswegen ist es recht wahrscheinlich, dass jemand sie verändert und nichts böses ahnt.

    Deswegen schlage ich vor, eine normale Datei zu nehmen. Du musst einfach die Daten so abspeichern, dass du sie wieder auslesen kannst. Um heimliche Dateienveränderer abzuschrecken sind Binärdaten recht praktisch. Die Dateiendung sollte auch darauf hinweisen. Ich nehme z.B. oft .dat für die geladenen Daten und .sav für gespeichertes.

  • Studium, Hochsprachen und was euch sonst noch so einfällt :-)

    • Marthog
    • 19. September 2012 um 22:11

    Ich werde auch dieses Jahr fertig und werde dann mit einem Informatikstudium beginnen, aber an einer Uni. Von Informatik an der FH hat mir jemand abgeraten und dieser jemand unterrichtet dort auch.


    Zu anderen Sprachen:
    Wer richtig Informatik machen will, sollte einen groben Einblick in viele Sprachen haben. Viele Sprachen sind zwar schwer, aber man lernt damit etwas über Computer. Bei C muss man zum Beispiel die ganze Speicherverwaltung selber machen, deswegen ist es sehr schwer. Es gibt auch nur wenige grundlegende Funktionen, den Rest muss man selber schreiben oder mit Libraries einbinden. Man programmiert halt sehr hardwarenah.
    C++ ist später einfacher, weil man die Speicherverwaltung in Klassen kapselt, bzw. fertige Klassen verwendet, sodass man z.B. für strings und arrays den ganzen Kram nicht mit einzelnen Funktionen selber machen muss. Dafür wird man am Anfang von der Standartlibrary und den ganzen Features förmlich erschlagen. Deswegen verwenden leider viele Anfänger von den C++-Featuren nur wenige Klassen und sonst schreiben sie C-Code. Der Anfang ist schwer und man hat schon mit einfachsten Programmen, die mit AutoIt in kürzester Zeit geschrieben sind, große Probleme. Dennoch lohnt es sich und man braucht es auch, weil C und C++ häufig als die Standartprogrammiersprachen angesehen werden und viele OpenSource Programme in diesen Sprachen sind.

    Sehr gut finde ich auch Python, auch wenn ich es noch kaum benutze. Als ich damals angefangen habe mit programmieren, hab ich gleich mit Python begonnen, die Probleme fingen aber schon mit dem Ausführen von Skripten an.

    Der Anfang wird aber immer schwierig, weil diese Sprachen viel komplexere Syntax haben als AutoIt und für große Programme ausgelegt sind. Zudem vermisst man auch Funktionen, die bei AutoIt selbstverständlich sind, wie z.B die Funktion Hex

  • X mal Wiederholung

    • Marthog
    • 19. September 2012 um 17:55
    [autoit]

    For $i=$start To $end Step $step
    ; ...
    Next

    [/autoit]

    Die Laufvariable (hier $i) startet mit dem Wert $start. Bei jedem Durchlauf der Schleife wird sie um $step erhöht, bis sie $end erreicht hat. Step ist optional (standart 1), muss also nicht jedesmal geschrieben werden.

    [autoit]

    For $i=0 To 4
    MsgBox(0, "", $i)
    Next

    [/autoit]


    ist das gleiche, wie

    [autoit]

    MsgBox(0, "", 0)
    MsgBox(0, "", 1)
    MsgBox(0, "", 2)
    MsgBox(0, "", 3)
    MsgBox(0, "", 4)

    [/autoit]

Spenden

Jeder Euro hilft uns, Euch zu helfen.

Download

AutoIt Tutorial
AutoIt Buch
Onlinehilfe
AutoIt Entwickler
  1. Datenschutzerklärung
  2. Impressum
  3. Shoutbox-Archiv
Community-Software: WoltLab Suite™