Consolen-Programme Lesen/schreiben teils inkompatibel

Hier werden, insbesondere in den Beta-Phasen, Bugmeldungen gepostet. Das offizielle BugForum ist allerdings hier.
Benutzeravatar
benji
Beiträge: 124
Registriert: 01.11.2006 20:23

Consolen-Programme Lesen/schreiben teils inkompatibel

Beitrag 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
Benutzeravatar
ts-soft
Beiträge: 22292
Registriert: 08.09.2004 00:57
Computerausstattung: Mainboard: MSI 970A-G43
CPU: AMD FX-6300 Six-Core Processor
GraKa: GeForce GTX 750 Ti, 2 GB
Memory: 16 GB DDR3-1600 - Dual Channel
Wohnort: Berlin

Beitrag 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
PureBasic 5.73 LTS | SpiderBasic 2.30 | Windows 10 Pro (x64) | Linux Mint 20.1 (x64)
Nutella hat nur sehr wenig Vitamine. Deswegen muss man davon relativ viel essen.
Bild
Benutzeravatar
benji
Beiträge: 124
Registriert: 01.11.2006 20:23

Beitrag von benji »

ts-soft hat geschrieben: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
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
freak
PureBasic Team
Beiträge: 766
Registriert: 29.08.2004 00:20
Wohnort: Stuttgart

Beitrag von freak »

Das liegt daran das die andere Anwendung die Daten puffert. Da lässt sich nichts dran ändern.
Benutzeravatar
ts-soft
Beiträge: 22292
Registriert: 08.09.2004 00:57
Computerausstattung: Mainboard: MSI 970A-G43
CPU: AMD FX-6300 Six-Core Processor
GraKa: GeForce GTX 750 Ti, 2 GB
Memory: 16 GB DDR3-1600 - Dual Channel
Wohnort: Berlin

Beitrag 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 :wink:
PureBasic 5.73 LTS | SpiderBasic 2.30 | Windows 10 Pro (x64) | Linux Mint 20.1 (x64)
Nutella hat nur sehr wenig Vitamine. Deswegen muss man davon relativ viel essen.
Bild
Benutzeravatar
benji
Beiträge: 124
Registriert: 01.11.2006 20:23

Beitrag 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...
Antworten