Echtzeit Log

08/12/2014 16:20 Moneypulation#1
Hallo,

ich hab jetzt lange gegooglet, konnte aber nichts zu einem Echtzeit Log finden. Ich würde nämlich gerne einen Log anzeigen lassen während mein Programm läuft und wenn bestimmte Funktionen ausgeführt werden, will ich so etwas wie _FileWriteLog() ausführen. Ich hab jetzt gesehen wie man das in eine .txt Datei speichert aber ich will dass es in Echtzeit, also während das Programm läuft angezeigt wird. Weiß jemand eine Lösung?

lg money
08/12/2014 16:22 butter123#2
consolewrite?
08/12/2014 16:36 Moneypulation#3
Quote:
Originally Posted by butter123 View Post
consolewrite?
Aber das speichert den text doch nur in die Konsole von AutoIt. Wenn ich es ausführe passiert ja nichts
08/12/2014 16:52 KDeluxe#4
So ganz stimmt das nicht, aber notwendig ist es auch nicht. Du kannst beispielsweise ein RichEdit in deiner GUI verwenden, in welches du immer weitere Log-Zeilen hinzufügst. Parallel dazu kannst du die Zeilen auch mittels FileWriteLine() in eine Datei abspeichern.
08/12/2014 17:18 butter123#5
ich versteh dein problem nicht. mit filewrite kannstes speichern, mit consolewrite oder guielementen anzeigen.
08/12/2014 18:40 Moneypulation#6
Code:
#include <GUIConstantsEx.au3>
#include <WindowsConstants.au3>
#include <EditConstants.au3>
#include <StaticConstants.au3>

 Local $myedit, $msg

    GUICreate("Meine GUI mit einem Edit-Feld") ; Erstellt ein GUI-Fenster welches mittig ausgerichtet wird

    $myedit = GUICtrlCreateEdit("Erste Zeile" & @CRLF, 176, 32, 121, 97, $ES_AUTOVSCROLL + $WS_VSCROLL)

    GUISetState()
	  Send("{END}")

    ; Wird hinzugefügt, 3. Parameter nicht vergessen!
    GUICtrlSetData($myedit, "Zweite Zeile",1)
	GUICtrlSetData($myedit, "Zweite Zeile2", 1)
	GUICtrlSetData($myedit, "Zweite Zeile3", 1)

    ; Die Schleife wiederholt sich, bis der Benutzer die Beenden-Aktion der GUI auslöst
    While 1
        $msg = GUIGetMsg()

        If $msg = $GUI_EVENT_CLOSE Then ExitLoop
    WEnd
    GUIDelete()
Danke für eure Hilfe. Wisst ihr wie ich jetzt noch einen Zeilenumbruch mach?
Ich denke, ich werde einfach diese GUI anzeigen lassen und dann bei bestimmten Funktionen GUICtrlSetData($myedit, "Funktion xy ausgeführt",1) schreiben

Quote:
Originally Posted by KDeluxe View Post
So ganz stimmt das nicht, aber notwendig ist es auch nicht. Du kannst beispielsweise ein RichEdit in deiner GUI verwenden, in welches du immer weitere Log-Zeilen hinzufügst. Parallel dazu kannst du die Zeilen auch mittels FileWriteLine() in eine Datei abspeichern.
Was genau ist denn ein RichEdit? Google sagt es ist eine UDF aber ich weiß jetzt nicht genau welche Datei das ist
08/12/2014 21:49 YatoDev#7
Quote:
Originally Posted by moneypulation View Post
Danke für eure Hilfe. Wisst ihr wie ich jetzt noch einen Zeilenumbruch mach?
Ich denke, ich werde einfach diese GUI anzeigen lassen und dann bei bestimmten Funktionen GUICtrlSetData($myedit, "Funktion xy ausgeführt",1) schreiben



Was genau ist denn ein RichEdit? Google sagt es ist eine UDF aber ich weiß jetzt nicht genau welche Datei das ist
@CRLF -> Carriage return + Linefeed
rich edit ist ein text feld in koda und kann ohne udf genutzt werden

GuiCtrlSetData($Edit,GuiCtrlRead($Edit) & "nächste zeile" & @CRLF)
08/12/2014 22:31 Moneypulation#8
Quote:
Originally Posted by »FlutterShy™ View Post
@CRLF -> Carriage return + Linefeed
rich edit ist ein text feld in koda und kann ohne udf genutzt werden

GuiCtrlSetData($Edit,GuiCtrlRead($Edit) & "nächste zeile" & @CRLF)
Vielen Dank auch an dich
08/12/2014 23:31 lolkop#9
Quote:
Originally Posted by »FlutterShy™ View Post
@CRLF -> Carriage return + Linefeed
rich edit ist ein text feld in koda und kann ohne udf genutzt werden

GuiCtrlSetData($Edit,GuiCtrlRead($Edit) & "nächste zeile" & @CRLF)
diese methode eines logs hat einige große nachteile.
der erste nachteil ist, das es kein autoscroling gibt...
bsp:
Code:
GUICreate("GUI", 300, 300, Default, Default, 0x10C80000)
GUICtrlCreateEdit("", 5, 5, 290, 290, 0x200844)
For $i=0 To 100
	GUICtrlSetData(-1, GUICtrlRead(-1)&@CRLF&$i&" -> abcdefghijklmnopqrstuvwxyz")
Next
While GUIGetMsg()<>-3
WEnd
eine potentielle lösung hierfür wäre die letzte zeile immer oben einzufügen.

ein viel schlimmerer nachteil aber ist, das bei jeder aktualisierung, stets der gesamte log eingelsen werden muss (was irgendwann im laufe der zeit mit sicherheit für probleme sorgen wird). somit wird mit steigender loggröße nicht nur das aktualisieren länger dauern, sondern irgendwann muss das ganze auch zwangsweise zum totalabsturz führen (spätestens, wenn der log mehr speicher benötigt, als zur verfügung steht)

bsp:
Code:
Dim $string
For $i=0 To 10000
	$string &= 'a'
Next
GUICreate("GUI", 300, 300, Default, Default, 0x10C80000)
GUICtrlCreateEdit("", 5, 5, 290, 290, 0x200844)
For $i=0 To 100
	GUICtrlSetData(-1, GUICtrlRead(-1)&@CRLF&$i&" -> "&$string)
Next
While GUIGetMsg()<>-3
WEnd
die einzige lösung für dieses problem wäre in der tat ein wirkliches rich edit, statt des normalen edits zu nutzen.
08/13/2014 01:28 Moneypulation#10
Quote:
Originally Posted by lolkop View Post
diese methode eines logs hat einige große nachteile.
der erste nachteil ist, das es kein autoscroling gibt...
bsp:
Code:
GUICreate("GUI", 300, 300, Default, Default, 0x10C80000)
GUICtrlCreateEdit("", 5, 5, 290, 290, 0x200844)
For $i=0 To 100
	GUICtrlSetData(-1, GUICtrlRead(-1)&@CRLF&$i&" -> abcdefghijklmnopqrstuvwxyz")
Next
While GUIGetMsg()<>-3
WEnd
eine potentielle lösung hierfür wäre die letzte zeile immer oben einzufügen.

ein viel schlimmerer nachteil aber ist, das bei jeder aktualisierung, stets der gesamte log eingelsen werden muss (was irgendwann im laufe der zeit mit sicherheit für probleme sorgen wird). somit wird mit steigender loggröße nicht nur das aktualisieren länger dauern, sondern irgendwann muss das ganze auch zwangsweise zum totalabsturz führen (spätestens, wenn der log mehr speicher benötigt, als zur verfügung steht)

bsp:
Code:
Dim $string
For $i=0 To 10000
	$string &= 'a'
Next
GUICreate("GUI", 300, 300, Default, Default, 0x10C80000)
GUICtrlCreateEdit("", 5, 5, 290, 290, 0x200844)
For $i=0 To 100
	GUICtrlSetData(-1, GUICtrlRead(-1)&@CRLF&$i&" -> "&$string)
Next
While GUIGetMsg()<>-3
WEnd
die einzige lösung für dieses problem wäre in der tat ein wirkliches rich edit, statt des normalen edits zu nutzen.
Das mit dem Scrolling ist mir auch aufgefallen aber ich hab schnell eine Lösung gefunden. Nach jedem Eintrag hab ich _GUICtrlEdit_Scroll ( $Log, $SB_SCROLLCARET ) geschrieben.

Aber mit dem Speicher hast du Recht. Daran hab ich noch garnicht gedacht. Und mein Bot soll für mehrere Stunden einbahnfrei funktionieren.

Danke dir

Edit: Ich werde wohl den Log jede 10-20 Minuten durch einen Timer beenden und wieder neu ausführen. Das hat zum glück keine Auswirkung auf den Bot
08/13/2014 10:33 butter123#11
wenns sehr auf performance ankommt, schreib dir vllt einen externen log. (nur ne idee, nicht getestet)
sende mit ConsoleWrite an den StdOut stream und benutz eine neue exe um den stream mit StdOutRead auszulesen. Die als CUI anstatt als GUI kompilieren und alles eingelesene wieder mit ConsoleWrite ausgeben. Ich denke dass das Cmd Fenster auf zeilenweises anzeigen von text optimiert ist^^
08/13/2014 12:50 alpines#12
Quote:
Originally Posted by butter123 View Post
wenns sehr auf performance ankommt, schreib dir vllt einen externen log. (nur ne idee, nicht getestet)
sende mit ConsoleWrite an den StdOut stream und benutz eine neue exe um den stream mit StdOutRead auszulesen. Die als CUI anstatt als GUI kompilieren und alles eingelesene wieder mit ConsoleWrite ausgeben. Ich denke dass das Cmd Fenster auf zeilenweises anzeigen von text optimiert ist^^
Man kann es aber auch derbe auf die Spitze treiben...
FileWrite wird wohl reichen.
08/13/2014 16:05 YatoDev#13
Quote:
Originally Posted by moneypulation View Post
Edit: Ich werde wohl den Log jede 10-20 Minuten durch einen Timer beenden und wieder neu ausführen. Das hat zum glück keine Auswirkung auf den Bot
$string darein den text für den log speichern und nur noch GuiCtrlSetData ausführen. z.b. nach 100 einträgen kannst du $string löschen
08/13/2014 17:15 Moneypulation#14
Quote:
Originally Posted by »FlutterShy™ View Post
$string darein den text für den log speichern und nur noch GuiCtrlSetData ausführen. z.b. nach 100 einträgen kannst du $string löschen
Stimmt, so gehts auch
08/13/2014 20:53 butter123#15
Quote:
Originally Posted by alpines View Post
Man kann es aber auch derbe auf die Spitze treiben...
FileWrite wird wohl reichen.
naja 5 minuten arbeit für nen guten log^^

Log:
Test Funktion: