Wenn ich das richtig versteeh, willst du 2 verschiedene Dinge tun lassen. Einmal eine Funktion ausführen wenn sich etwas ändert. Und dann eine MsgBox ausgeben wenn sich nichts ändert.
Aber: Wie schnell aktualisieren sich diese Koordinaten? So schnell, dass du sicherstellen kannst, dass in ein paar Milliskunden nie 2 mal der selbe Wert ausgelesen wird?
Und könnte man nicht eine Art Switch Abfrage machen die je nach Cheksum Ergebnis entweder Funktion ausführt oder MsgBox anzeigt?
Beiträge von name22
-
-
Mensch das hab ich schon wieder übersehen :D. Herzlichen Glühstrumpf Irrlicht! Alles Gute zum 18ten
. -
Zitat
aber das ohne den Sleep Befehl
[autoit]
Ich verstehe zwar nicht ganz wieso du das willst, aber das geht entweder mit jeder der folgenden Funktionen:_Timer_SetTimer
[/autoit]
AdlibRegister
TimerInit
Wenn du das mit normalen Timern machen willst, brauchst du eine zusätzlicher Endlosschleife die immer die vergangene Zeit abfragt. Da ist Sleep aber fast effektiver. Und für den Zwecke würde ich auf _Timer_SetTimer oder AdlibRegister zurückgreifen.Und die Logik hinter deinen Checksum Vergleichen verstehe ich immer noch nicht. Wieso willst du abfragen ob sich nichts geändert hat (und das auch noch in so kurzen Abständen).
-
Zitat
wenn ich das so versuche gibt er mir trotzdem am laufenden Band die msgBoxen aus...
Was soll da auch sonst passieren? Dein Code gibt immer dann eine MsgBox aus, wenn eine Sekunde vergangen ist und die beiden Prüfsummen übereinstimmen (d.h. wenn sich innerhalb von ein paar Millisekunden nichts in dem Bildschirmbereich geändert hat).
Da die If Abfrage direkt nach dem ersten PixelChecksum kommt, liegt dazwischen nur die Zeit die die zweite PixelChecksum benötigt um einen Wert zurückzugeben (wenige Millisekunden, maximal). Wenn du ein reguläres Fenster damit überwachst, wird sich in dieser Zeit dort nicht viel ändern... -
Erstelle eine neue leere Bitmap entweder mit GDIPlus_BitmapCreateFrom Graphics oder mit der GDIP.au3 Funktion _GDIPlus_BitmapCreateFromScan0.
Dann erstellst du ein Graphics-Object für die Bitmap mit ImageGetGraphicsContext. In diese zeichnest du dann mit _GDIPlus_GraphicsdrawImageRect beide Bilder rein.
Die Grafik und die 2 alten Bilder kannst du dann aus dem RAM entfernen (mit den Dispose Funktionen). Die Bitmap kannst du dann mit _GDIPlus_GraphicsdrawImageRect auf jede beliebige Grafik zeichnen, dort sind dann beide Bilder drin.
Wenn allerdings beide Bilder die selbe Größe haben, könntest du dir auch überlegen einfach das eine Bild in das andere zu malen. Selbe Prozedur wie oben. -
Wollte ich auch grad sagen :D. Mit den HXX Boards kannst du zwar die Intel Grafikeinheit der CPU nutzen, aber übertakten von K CPUs über den Multiplier ist wohl nicht drin.
Also wenn du dir dieses Mainboard kaufst, brauchst du keine K Version der CPU. Die Z77 unterstützen das aber auf jeden Fall. Kannst ja bei ASRock.com nachschauen (guck dir da einfach mal alle 77er Boards an.).
ASRock kann ich nur empfehlen, bin mit meinem P67 echt zufrieden. -
Ich denke mit einem i5 dürftest du für eine ziemlich lange Zeit zufrieden sein. Irgendwann werden wir bei der CPU Entwicklung sowieso an die physischen Limits stoßen. Dann muss man auf andere Materialien umsteigen und das wird ewig dauern.
Wenn du übertakten willst, dann kaufst du dir am besten eine k Version. Viel einfacher wird das übertakten dann auch nicht mehr. Übertreiben sollte man es natürlich trotzdem nicht ^^. Mein i5 2500k läuft momenten bei 4GHz und ist völig stabil, wird nicht zu heiß, verbraucht nicht zu viel Strom etc. Ich kann mir nicht vorstellen, dass du mehr Leistung benötigst als ein 4GHz Quadcore liefern kann wenn du nur vorhast ein paar Spiele auf akzeptablen Einstellungen zu spielen. Meine i5 2500k - GTX 570 Kombination packt fast jedes aktuelle Spiel auf Maximalen oder zumindest hohen Einstellungen. -
Zitat
Deshalb hab ich auch geschrieben, dass er sich dann demnächst auch eine neue Graka zuzulegen sollte

Das ist nicht das einzige Problem. Wie schon gesagt, ich kenne kaum ein Spiel, dass mehr als 4 kerne/Threads nutzt. Und wenn man von der Anzahl der virtuellen Kerne absieht, ist der Unterschied zwischen i5 und i7 nicht groß genug für den preis. Meiner Meinung nach versteht sich. Außerdem... Welche Anwendung benötigt mehr als eine effiziente 3.5-4.0GHz CPU? Selbst 3D Modelling mit Cinema4D 3DMax etc. geht damit schon recht fix. -
Zitat
falls du etwas Geld übrig hast auch ein i7-2600k wobei die sich nicht
Das lohnt sich meiner Meinung nach auf einem Mittelklasse Gaming PC mit einer älteren Grafikkarte kein bisschen. Besonders wenn man den Preis betrachtet. -
Zitat
Der PC sollte eine hohe Rechenleistung besitzen und für Computerspiele/Sonstige rechenintensive Anwendungen noch ein Paar Jahre aktuell sein.
Wenn du von aktuellen Spielen sprichst, bin ich mir nicht sicher ob du da mit 400€ hinkommst... Es kommt natürlich darauf an, um welche Spiele es sich handelt, mit welchen Einstellungen du spielen willst und auf welcher Auflösung.
Willst du mit dem PC hauptsächlich zocken? Wenn ja, würde ich eher in einen guten QuadCore investieren und die HexaCores erstmal links liegen lassen. Die meisten Spiele können mit sovielen Cores nicht allzu viel anfangen. Das heißt, auch Intels Hyperthreading Gedöns würde nicht viel bringen. Wenn du aber auch viel mit Videobearbeitung, 3D Modelling etc. machst sieht das wieder anders aus.
Ob sich 2 Grafikkarten bei einem 400€ PC lohnen?.. Das bezweifle ich. Vermutlich wäre da die Investition in eine einzelne teurere Karte sinnvoller. Ganz perfekt arbeiten die nämlich auch nicht zusammen.
Bei der Gelegenheit möchte ich allerdings auch auf einen relevanten Text hinweisen, der seit Längerem unter "Nachrichten" im Portal zu lesen ist
... -
Das ist nicht schwer. Dazu braucht man nur ein bisschen Mathematik. Wie sollen jetzt die IDs aussehen? Wie im ersten Beispiel linear von 0-191 oder 2-dimensional (0/1, 1/2...) wie im zweiten?
Und mit Koordinaten meinst du die Koordinaten bezogen auf das Rechteck das entsteht wenn du alle Felder in einem 16*12 Gitter anordnest?Edit:
[autoit]
Nur mal als Beispiel mit den IDs von 0-191:ConsoleWrite(_GetID(15*40, 11*40) & @CRLF)
[/autoit][autoit][/autoit][autoit]Func _GetID($iX_Coord, $iY_Coord)
[/autoit]
Return Floor($iX_Coord + $iY_Coord * 16) / 40
EndFunc -
Zitat
Genau das will er doch aber auch stayawayknight
Er sagt nur, dass er 5 Arrays bereits als Parameter hat... Aber wenn die verschiedene Größen/Dimensionen haben ist stayawayknights Vorschlag natürlich besser geeignet. -
Zitat
So lassen sich vielleicht komplexere Umformungen in Multidimensionale Arrays vermeiden...
Ich versteh nicht was daran komplexer sein soll... Das kommt fast auf das selbe raus, nur muss man bei deiner Methode vorher noch das Element des ersten Arrays in eine Variable speichern bevor man an das darin enthaltene Array rankommt.
Die einzige Ausnahme ist natürlich wenn die Arrays verschieden viele Elemente haben. Dann wird es mit multidimensionalen Arrays schwierig. Aber das kommt darauf an was genau AutoItFreak machen will.
Erleuchte uns AutoItFreak ;). Sonst können wir hier nur wild spekulieren. -
Dann probier es mal so:
[autoit]$sDataRaw = FileRead(@ScriptDir & "\YourFile.txt")
[/autoit][autoit][/autoit][autoit]
$aProblem = StringRegExp($sDataRaw, "(?s)Problem: (.+)", 3)ConsoleWrite($aProblem[0])
[/autoit] -
Kommt nach der Problembeschreibung noch etwas? Oder ist das immer das letzte Element? Wenn nicht, was kommt danach?
Irgendwie muss das Pattern ja wissen wo es aufhören soll ^^. -
Zitat
ja aber in dieser funktion übergebe ich schon fünf arrays
und ich will aber das der benutzer noch mehr hinzufügen kann
Das ist ja schön und gut, aber leider nicht möglich in AutoIt. Zumindest nicht so wie du es in deinem ersten Post erklärt hast.
Wie ist diese Funktion denn aufgebaut? Wie sehen die Arrays aus die bereits Parameter sind? Wie viele Dimensionen haben sie? Ich bin mir sicher, dass wir da irgendwas basteln können.
Vermutlich am ehesten mit einem multidimensionalen Array. -
Also kann die Problembeschreibung auch über mehrere Zeilen gehen? Und gibt es nur eine Problembeschreibung etc. pro Datei?
-
Zitat
Machs doch mit Arrays, kannste zwar nicht unenendlich viele Parameter machen, aber über ne Million bestimmt.
Das wurde doch schon 2 mal gepostet ?(.
Und um genau zu sein sind es: "Arrays: A maximum of 64 dimensions and/or a total of 16 million elements" also theoretisch kannst du 1.6x10⁷ Parameter per Array übergeben. Mit mehreren Dimensionen natürlich noch viel mehr. Allerdings geht dir da irgendwann der Arbeitsspeicher aus. -
Eventuell kannst du das Array dann auch als ByRef Parameter übergeben. Das erhöht (besonders bei großen Arrays) die Geschwindigkeit des Funktionsaufrufs.
Dabei musst du allerdings beachten, dass alle Änderungen die du am Array innnerhalb der Funktion machst auch beim Array außerhalb der Funktion erscheinen, denn es handelt sich um das selbe Array.
Wenn du das Array als normalen Parameter übergibst, wird eine lokale Kopie des Arrays für die Funktion erstellt, und es werden keine Änderungen außerhalb der Funktion übernommen.
BitOR, BitAND und wie sie alle heißen, können nur eine (fast) beliebige Anzahl von Parametern übernehmen, weil sie interne AutoIt Funktionen sind. Die werden komplett anders interpretiert als in AutoIt geschriebene Funktionen. -
Zitat
war mir grade nur nicht klar wieso ihr exakt die selben benutzt habt =)
Das ist vermutlich zum Teil Zufall.. Aber es gibt auch bestimmte inoffizielle Richtlinien an die sich natürlich keiner halten muss. Die sollen lediglich das lesen von Code einfacher machen.
Generell ist es üblich, englische Variablennamen zu verwenden, die Variablen logisch und übersichtlich zu bennenen und ungarische Notation zu verwenden.
Da in den Beispielen der Hilfe schon seit Ewigkeiten $nMsg als Rückgabewert von GUIGetMsg benutzt wird machen das jetzt fast alle so. Auch in den meisten Tutorials wird das so gemacht.
Aber da wir den erweiterten Modus von GUIGetMsg verwenden ist das präfix nicht 'n' sondern 'a' weil GUIGetMsg statt einer Zahl ein Array zurückgibt (siehe ungarische Notation).