Mein Lazarus kennt TProcess.Output.NumBytesAvailable nicht

Rund um die LCL und andere Komponenten
Antworten
Giantics
Beiträge: 88
Registriert: Sa 3. Mär 2007, 13:46
OS, Lazarus, FPC: Winux (L 0.9.xy FPC 2.2.z)
CPU-Target: xxBit
Wohnort: Langenbrettach

Mein Lazarus kennt TProcess.Output.NumBytesAvailable nicht

Beitrag von Giantics »

Hi,
laut dieser Seite kann man mit NumBytesAvailable herausfinden, wieviele Bytes im Stream sind. Mein Lazarus kennt aber die Eigenschaft nicht. Habe Lazarus 0.9.22 und FP 2.0.4. Muss ich etwas updaten oder habe ich etwas übersehen?
Bzw. Kann ich beim Output-Stream eines TProcess anders herausfinden, wieviele Bytes drin sind? Wenn ich zuviele Bytes lesen möchte ist der Stream blockiert bis die Daten da sind.

Gruß
Thomas

Christian
Beiträge: 6079
Registriert: Do 21. Sep 2006, 07:51
OS, Lazarus, FPC: iWinux (L 1.x.xy FPC 2.y.z)
CPU-Target: AVR,ARM,x86(-64)
Wohnort: Dessau
Kontaktdaten:

Beitrag von Christian »

Wie wärs mit Size ? Das ist ja die standart Eigenschaft dafür die in jedem TStream abkömmling da ist habs nicht getestet, nur sone idee. Wozu willst du das überhaupt wissen ? Brauch man doch gar net.
W.m.k.A.h.e.m.F.h. -> http://www.gidf.de/

Giantics
Beiträge: 88
Registriert: Sa 3. Mär 2007, 13:46
OS, Lazarus, FPC: Winux (L 0.9.xy FPC 2.2.z)
CPU-Target: xxBit
Wohnort: Langenbrettach

Beitrag von Giantics »

In Size steht seltsamerweise immer "-1".
Ich brauche die Information, weil sonst der Process blockiert ist:

"If this number is nonzero, then reading NumBytesAvailable bytes from the stream will not block the process. Reading more than NumBytesAvailable bytes will block the process, while it waits for the requested number of bytes to become available."

Ich muss jedoch währendessen den StdErr-Kanal vom TProcess überwachen.

Christian
Beiträge: 6079
Registriert: Do 21. Sep 2006, 07:51
OS, Lazarus, FPC: iWinux (L 1.x.xy FPC 2.y.z)
CPU-Target: AVR,ARM,x86(-64)
Wohnort: Dessau
Kontaktdaten:

Beitrag von Christian »

Ja das macht man ja eigentlich auch in nem seperaten Thread, ist doch super wenn der blockiert wird und man nicht pollen muss...
W.m.k.A.h.e.m.F.h. -> http://www.gidf.de/

Giantics
Beiträge: 88
Registriert: Sa 3. Mär 2007, 13:46
OS, Lazarus, FPC: Winux (L 0.9.xy FPC 2.2.z)
CPU-Target: xxBit
Wohnort: Langenbrettach

Beitrag von Giantics »

Christian hat geschrieben:Ja das macht man ja eigentlich auch in nem seperaten Thread, ist doch super wenn der blockiert wird und man nicht pollen muss...


Der Prozess läuft schon in 'nem eigenen Thread (siehe Projekte->easyMP3Gain). Es geht darum, dass die gestartete Anwendung im Kanal Stderr fortlaufend den Status in Prozent zurückgibt und immer wenn er bei 100% angelangt ist, dann kommt beim Output-Kanal die Zusammenfassung (dann kommt die nächste Aufgabe wieder bei 0%). Wenn ich jedoch beim Lesen vom Output-Kanal mehr Bytes lese als drinsteht, dann ich danach den Stderr-Kanal nicht mehr überwachen. Und Thread im Thread ist auch nicht unbedingt die richtige Methode.
Das muss laut Freepascal-Dokumentation ja auch einfacher gehen. Nur leider gibts bei mir die angesprochene Eigenschaft nicht.

Christian
Beiträge: 6079
Registriert: Do 21. Sep 2006, 07:51
OS, Lazarus, FPC: iWinux (L 1.x.xy FPC 2.y.z)
CPU-Target: AVR,ARM,x86(-64)
Wohnort: Dessau
Kontaktdaten:

Beitrag von Christian »

Frag halt mal nach auf der Mailingliste warum die Property fehlt, sauberer find ichs aber Prozesse in nem sepraten thread abzufragen. In deinem Fall müsstest dann wenn was angekommen ist mit Synchronize eine procedure in deiner Hauptanwendung aufrufen die den Status ausgibt. Wenn du das unbedingt in dem Thread machen willst halt n 2. Thread.
W.m.k.A.h.e.m.F.h. -> http://www.gidf.de/

Giantics
Beiträge: 88
Registriert: Sa 3. Mär 2007, 13:46
OS, Lazarus, FPC: Winux (L 0.9.xy FPC 2.2.z)
CPU-Target: xxBit
Wohnort: Langenbrettach

Beitrag von Giantics »

Ich habe mal mein FP auf Version 2.2 upgedatet. Da ist die Eigenschaft "NumBytesAvailable" vorhanden. Leider verträgt sich mein Lazarus nicht damit. Ich werde jetzt wieder downgraden und die Units an der Stelle manuell ändern. Mal sehen obs funktioniert.

Christian
Beiträge: 6079
Registriert: Do 21. Sep 2006, 07:51
OS, Lazarus, FPC: iWinux (L 1.x.xy FPC 2.y.z)
CPU-Target: AVR,ARM,x86(-64)
Wohnort: Dessau
Kontaktdaten:

Beitrag von Christian »

Seit wann verträgt sich lazarus nicht mir fpc 2.2 ? Quatsch wenn du es nicht packst den compiler richtig zu installieren dann nimm z.b. einen Daily Snapshot. oder warte bis der 2.2 in der Offiziellen Lazarusversion gelandet ist. Aber vertragen tun sich die beiden wunderbar.
W.m.k.A.h.e.m.F.h. -> http://www.gidf.de/

monta
Lazarusforum e. V.
Beiträge: 2809
Registriert: Sa 9. Sep 2006, 18:05
OS, Lazarus, FPC: Linux (L trunk FPC trunk)
CPU-Target: 64Bit
Wohnort: Dresden
Kontaktdaten:

Beitrag von monta »

hast du mal nen make all gemacht?
Johannes

Christian
Beiträge: 6079
Registriert: Do 21. Sep 2006, 07:51
OS, Lazarus, FPC: iWinux (L 1.x.xy FPC 2.y.z)
CPU-Target: AVR,ARM,x86(-64)
Wohnort: Dessau
Kontaktdaten:

Beitrag von Christian »

Ich denk seine fpc.conf wird nicht angepasst sein, das alte spiel aber raten bringt hier nichts.
W.m.k.A.h.e.m.F.h. -> http://www.gidf.de/

Giantics
Beiträge: 88
Registriert: Sa 3. Mär 2007, 13:46
OS, Lazarus, FPC: Winux (L 0.9.xy FPC 2.2.z)
CPU-Target: xxBit
Wohnort: Langenbrettach

Beitrag von Giantics »

Christian hat geschrieben:Seit wann verträgt sich lazarus nicht mir fpc 2.2 ? Quatsch wenn du es nicht packst den compiler richtig zu installieren dann nimm z.b. einen Daily Snapshot. oder warte bis der 2.2 in der Offiziellen Lazarusversion gelandet ist. Aber vertragen tun sich die beiden wunderbar.


Vertragen tun sie sich bestimmt, wenn man es schafft alles korrekt einzurichten :wink: . Offenbar war ich nicht in der Lage dazu.
Ich hab die debs von FPC2.2 installiert. Dann meinte mein Lazarus, dass er die Interfaces.pp nicht finden kann beim Kompilieren. Nach einiger Zeit Recherche im Netz lief das dann zwar, aber dafür hat er jedesmal, wenn ich im Oberflächendesigner auf ein Event einer Komponente doppelgeklickt habe, einen Fehler gebracht (weiß nimmer wie der hieß) statt die Funktion im Quellcode zu erstellen (auch bei neuen leeren Projekten).

Jetz is wieder die alte Version drauf und da funktioniert es einwandfrei.

Bis Lazarus 9.23 kann ich die entsprechende Unit auch manuell erweitern.

Antworten