TFileStream + Socket-ReadStream blockieren die Anwendung total



  • Hi,

    ich schreibe gerade ein altes Visual Basic Programm von mir um in BC++ 6

    Dieses Programm verbindet sich mit einem Socket zu einem MP3 Streaming Server (irgendein Radiosender im Internet eben) und nimmt den Stream als MP3 Datei auf Platte auf.

    MP3FStream = new TFileStream("C:\\mp3out2.mp3", fmCreate);
     IdTCPClient1->ReadStream(MP3FStream,-1,true);
    

    klappt dafür eigentlich ganz toll bis auf den Umstand, dass mir während der Aufnahme die Anwendung total einfriert.
    Er nimmt zwar auf aber ich kann das Programm nicht mehr steuern.

    Den Stream mit kleineren Paketen

    IdTCPClient1->ReadStream(MP3FStream,1024,true);
    

    habe ich schon probiert, auch das Einbauen eines Timers, der alle 1/4 Sekunde

    Application->ProcessMessages();
    

    durchführt, hilft nicht weiter.

    Das ProcessMessages() im Work Hook des Sockets klappt eigentlich ganz gut, so lange es denn einen Work-Hook gibt.
    Wenn die Netzwerkverbindung hängen bleibt oder der Server mal keine Daten liefert, bleibt alles wieder haengen.

    Wie kann ich das machen, dass die Aufnahme mir nicht die gesamte Anwendung blockiert?



  • Das Ganze in einen eigenen Thread auslagern?



  • MP3FStream = new TFileStream("C:\\mp3out2.mp3", fmCreate); 
    IdTCPClient1->ReadStream(MP3FStream,-1,true);
    

    Muss da nicht noch fmOpenWrite zusätzlich zum fmCreate hin, da ja in die Datei geschrieben wird?



  • WebFritzi schrieb:

    Muss da nicht noch fmOpenWrite zusätzlich zum fmCreate hin, da ja in die Datei geschrieben wird?

    nein, da fmCreate fmWrite impliziert, wenn ich die Hilfetexte noch richtig im Kopf habe.

    -junix



  • hallo,

    habe gerade deine Beiträge gelesen, ich will einen Player proggen der MP3 Streams spielen kann. Nur einen PLayer keine Aufnahmen ...

    kannst du mir weiterhelfen ?? 😕



  • benutz einfach die idAntifreeze Komponente... in der Hilfe steht, dass du die einfach nur einbauen brauchst..


Anmelden zum Antworten