Anzeige:
Ergebnis 1 bis 7 von 7

Thema: scanf in (Q)thread BENÖTIGT EOF ??

  1. #1
    Registrierter Benutzer
    Registriert seit
    05.04.2003
    Ort
    STUTTGART
    Beiträge
    27

    scanf in (Q)thread BENÖTIGT EOF ??

    Code:
    #include<qapplication.h>
    #include<qthread.h>
    #include<stdio.h>
    #include<unistd.h>
    
    int a=1, b,c=0;
    
    class rdFrmEmacs : public QThread {
    
     public:
          virtual void run();
    };
    void
    rdFrmEmacs::run()
    {
     do
     { if (!c)
       {     scanf("%d %d\n",&a,&b); // from emacs
         c = a+b;
       }
     }while(a >= 0);
    }
    int main()
    {    rdFrmEmacs t; t.start();
     do{
         if(c)
         {  printf("Summe aus Thread t %d\n",c);
            fflush(stdout);
            c=0;
         }
     }while(a >= 0);
     t.wait();
    }
    arbeite nur dann wie erwartet wenn die Eingaben
    nichtnur mit Returntaste, sondern danach auch noch
    mit ctl-D abgeschlossen werden.

    Und eigentlich hätte ich auch noch die Ausgabe der
    letzten Summe erwartet, die sich aus dem a < 0 ergibt.

    Dieser Code
    ist nur eine Vorübung für ein wesentlich größeres
    Programm daß durch emacs-lisp als asynchroner
    prozess gestartet wird.

  2. #2
    Registrierter Benutzer
    Registriert seit
    25.10.2004
    Beiträge
    819
    Zitat Zitat von FriedrichLaher
    ]arbeite nur dann wie erwartet wenn die Eingaben
    nichtnur mit Returntaste, sondern danach auch noch
    mit ctl-D abgeschlossen werden.
    Ja, du rufst scanf ja auch solange auf, bis ein EOF kommt.

  3. #3
    Registrierter Benutzer
    Registriert seit
    05.04.2003
    Ort
    STUTTGART
    Beiträge
    27
    nein, Endekriterium für das "do" im Thread ist ja

    "erste eingegebene Zahl < 0 " ( eben
    Code:
     }while ( a >= 0
    );
    auch
    muß ja im gegebenen Code ( unverständlicherweise )
    für JEDE Ausgabe die man erhält ein EOF ( cntrl-D ) getippt
    werden.
    ( bzw. via emacs z.B.
    Code:
      (process-send-string "pn" "1 2 \n^D)
    )

  4. #4
    Administrator Avatar von anda_skoa
    Registriert seit
    17.11.2001
    Ort
    Graz, Österreich
    Beiträge
    5.477
    Wozu brauchst du den Thread?

    Ciao,
    _
    Qt/KDE Entwickler
    Debian Benutzer

  5. #5
    Registrierter Benutzer
    Registriert seit
    05.04.2003
    Ort
    STUTTGART
    Beiträge
    27
    in der beabsichtigen Anwendung "scannt" die "main"
    das Geschehen in einem Bildschirmfenster ( Internetspiel ) durch auslesen des Bildschirmspeichers,
    die Ausgaben gehen an emacs, und überprüft auch ob "kommandos" von emacs anliegen.

    Einfacher wäre es wenn ein qt-Programm auch Mausklicks
    mitbekommen könnte die für ein anderes Fenster ( eben das Spiel ) bestimmt sind.

  6. #6
    Registrierter Benutzer
    Registriert seit
    23.05.2004
    Beiträge
    592
    [...] arbeite nur dann wie erwartet [...]
    Es ist dann immer sehr hilfreich mitzuteilen, *was* man denn erwartet.

    Zu deinem Programm: Wenn du mit Threads arbeitest, müsstest du irgendwie den Zugriff auf gemeinsame Daten aus unterschiedlichen Threads synchronisieren, das ist dir doch bewußt, oder? So können lustige Dinge passieren, wie doppelte (x-fache...) Ausgaben für ein Ergebnis, Busy-Waits, evtl... könnte es sogar sein das beide Schleifen endlos laufen (naja, beim letzten bin ich mir nicht sicher).

    Außerdem, falls das dein "richtiger" Code ist, und nicht eine hier fürs Forum verkleinerte Version, gehört der Rückgabewert von scanf überprüft. Das ist sonst auch ein heißer Kandidat für eine Endlosschleife.

  7. #7
    Administrator Avatar von anda_skoa
    Registriert seit
    17.11.2001
    Ort
    Graz, Österreich
    Beiträge
    5.477
    Zitat Zitat von FriedrichLaher
    in der beabsichtigen Anwendung "scannt" die "main"
    das Geschehen in einem Bildschirmfenster ( Internetspiel ) durch auslesen des Bildschirmspeichers,
    die Ausgaben gehen an emacs, und überprüft auch ob "kommandos" von emacs anliegen.
    Könnte man dann nicht emacs mit einem QProcess starten und dort einfach dessen Output lesen?

    Einfacher wäre es wenn ein qt-Programm auch Mausklicks
    mitbekommen könnte die für ein anderes Fenster ( eben das Spiel ) bestimmt sind.
    Geht durchaus, vielleicht abhängig von der Plattform.
    Ich schätze unter Windows kann man auch die Windows Messages anderer Fenster bekommen, unter X11 geht das ziemlich sicher wenn man das dem X Server mitteilt.

    Ciao,
    _
    Qt/KDE Entwickler
    Debian Benutzer

Lesezeichen

Berechtigungen

  • Neue Themen erstellen: Nein
  • Themen beantworten: Nein
  • Anhänge hochladen: Nein
  • Beiträge bearbeiten: Nein
  •