Seite 1 von 1
Consolen-Programme Lesen/schreiben teils inkompatibel
Verfasst: 15.01.2009 19:43
von benji
Hallo!!
Ich habe vor kurzem festgestellt, dass Read/Writeprogramstring bei manchen consolen Programmen scheinbar erst funktioniert, nachdem das Programm beendet wurde.
Die schreibfunktionen werden ausgeführt und haben auch Auswirkungen, allerdings scheint das Auslesen des Texts aus der Console erst nach dem Beenden der Anwendung zu funktionieren.
Dieses Problem taucht bei consolen Programmen auf, die NICHT in Purebasic geschrieben wurden.
Habe diverse Programme getestet immer mit dem Problem, dass die Textausgabe immer erst nach beenden des gestarteten Programms erfolgte.
Hier mein Thread - dort finden sie auch die Binary, bei der das beschriebene eintritt.
Viele Grüße, benji
Verfasst: 15.01.2009 19:51
von ts-soft
Betriebssystem?
PureBasic Version?
evt. Computerausstattung
Beispielcode?
Dem Link kann ich nur entnehmen, das Du das Eventhandling noch nicht
verstanden hast.
http://www.chiark.greenend.org.uk/~sgta ... gs-de.html
Verfasst: 15.01.2009 19:59
von benji
OS: Win XP SP3
PB.: 4.30
der gag ist aber, dass der "Fehler" nur bei manchen anwendungen auftaucht
Code hier - ein und der selbe Code - unterschiedliche Anwendungen - unterschiedliches Ergebnis:
Code: Alles auswählen
UIN.s = "476077258" ; 476077258 465879999
pw.s = "123456"
*mem = AllocateMemory(2000)
hwnd = OpenWindow(0,0,0,400,300,"Test",#PB_Window_ScreenCentered|#PB_Window_SystemMenu)
CreateGadgetList(hwnd)
List = ListIconGadget(#PB_Any,5,5,390,290,"Test",350)
anz = 0
zeile$ = ""
listid = GadgetID(List)
; prog = RunProgram("imcore/bin/base/accbuddy.exe" ,"" , "" , #PB_Program_Open | #PB_Program_Read |#PB_Program_Write ) ; Cpp (?)Console-Program -> erst am Ende der Runtime wird der Text ausgegeben
prog = RunProgram("testconsole2.exe" ,"", "" , #PB_Program_Open | #PB_Program_Read | #PB_Program_Error |#PB_Program_Write) ;PB-Programm -> Text wird in echtzeit ausgegeben
; prog = RunProgram("cmd.exe" ,"/k testconsole2.exe", "D:\Programmierung\Purebasic\source" , #PB_Program_Open | #PB_Program_Read ) ;"umweg" über die CMD -> erst am Ende der Runtime wird der Text ausgegeben
If prog
; CreateThread(@readtext(), prog)
While ProgramRunning(prog)
zeile$ = ReadProgramString(prog)
AddGadgetItem(List, -1, zeile$)
anz=SendMessage_(listid, #LVM_GETITEMCOUNT, 0, 0) - 1
SendMessage_(listid, #LVM_ENSUREVISIBLE, anz, #True)
While WindowEvent() : Wend
Wend
EndIf
CloseProgram(prog)
Repeat
event = WaitWindowEvent()
Until Event = #PB_Event_CloseWindow
End
Falls es kein Fehler ist dann wüsste ich gern warum es nicht klappt xD
Verfasst: 15.01.2009 20:10
von freak
Das liegt daran das die andere Anwendung die Daten puffert. Da lässt sich nichts dran ändern.
Verfasst: 15.01.2009 20:13
von ts-soft
Der Code zur Testconsole2 wäre zwar auch nett, aber das Eventhandling,
wo Ereignisse verschluckt werden ist eine Krücke, da kann man nicht von
einem Bug sprechen.
Du solltest das Fenster disablen, verstecken oder ähnlich, während Du die
Ausgaben liest. Erst danach das Fenster aktualisieren.
Oder Du verwendest Threads und kommunizierst mit dem Eventloop per
Messages (für Anfänger nicht geeignet.)
Ist IMHO kein Bug.
// Nachtrag:
siehe freak

Verfasst: 15.01.2009 20:16
von benji
freak hat geschrieben:Das liegt daran das die andere Anwendung die Daten puffert. Da lässt sich nichts dran ändern.
ach schade.... darüber hatte ich auch was gelesen.
Naja danke - und sorry für den thread...