Datenaustausch Fenster <-> Programm ???



  • Also, ich möcht Daten zwischen einem Programm, das ich in folgender Funktion starte:

    int SimStart()
    {
     switch(vfork())
     {
       case 0:
         if(execlp(MySimFile,MySimName,MySimPara1,MySimWorld,     //das sind Paras
                   MySimPara2,MySimRobot,NULL)==-1)               //für dem Simul.
           {
            perrror("execlp");
            return -1;
           }
         break;
       case -1:
          perror("fork");
          return -1;
          break;
      }
    }
    

    und einem Fenster :

    QApplication MyApp(argc, argv);
    QString MyString = "TEXT";
    QWidget *MyWidget = new QWidget();
    QLabel  *MyLabel = new QLabel(MyString, MyWidget);
    MyApp.setMainWidget(MyWidget);
    MyWidget->show();
    
    MyApp.exec();
    

    austauschen. Sprich die Daten meines im Simulator laufenden Roboters im Fenster
    ausgeben, d.h. das Fenster und der Simulator müßten irgendwie paralell laufen.
    Wenn ich das mit

    MyApp.exec()
    

    mache,läuft das nicht.

    Wenn da einer nee Idee hat wäre das Klasse!!

    Bis denn

    Frank aus Bottrop/Germany 😋



  • Dieser Thread wurde von Moderator/in HumeSikkins aus dem Forum C++ in das Forum Linux/Unix verschoben.

    Im Zweifelsfall bitte auch folgende Hinweise beachten:
    C/C++ Forum :: FAQ - Sonstiges :: Wohin mit meiner Frage?

    Dieses Posting wurde automatisch erzeugt.



  • Pipes könnten dir hier wahrscheinlich helfen (man: pipe(2))

    http://www.ecst.csuchico.edu/~beej/guide/ipc/



  • Ich bin mir nicht schier ob ich dein Problemm richtig verstehe.
    Du möchtes also datein zwischen Programm A (qt-gui) und programm B (keine gui) austauschen.
    Wie schon weiter oben erwähnt, kann man das über eine pipe machen.
    Ich habe angenommmen das keinen Quellcode von deinem Simulator-Programm hast, ich habe auch angenomen das dein Simulator-Programm als parameter Liste von zeichen-Ketten erwartet, darüberhinaus habe ich auch angenamen das dieses Programm Daten in stdout schreibt.
    Vielleicht hilft dir dieses Beispiel weiter:
    ##########################################################
    Quellen für das GUI-Programm:

    /*gui.cpp*/
    #include <qapplication.h>
    #include <qstring.h>
    #include <qlabel.h>
    #include <qwidget.h>
    #include "pipe.h"
    
    int main(int argc,char **argv)
    { 
      char buffer[25];
      QApplication MyApp(argc, argv); 
    
      PIPE *p1=new PIPE();
      p1->_pipe("./steurung.bin","r",buffer);
      QString MyString = (const char*)buffer;
    
      QWidget *MyWidget = new QWidget(); 
      QLabel  *MyLabel = new QLabel(MyString, MyWidget); 
      MyApp.setMainWidget(MyWidget); 
      MyWidget->show(); 
      return MyApp.exec();
    }
    
    /*pipe.h*/
    #include <stdio.h>
    
    class PIPE
    {
    public:
      PIPE();
      ~PIPE();
    
      FILE *pd;//pipe destriptor 
      char *_pipe(const char *command, const char *type,char *buffer);
    
    };
    
    /*pipe.cpp*/
    #include "pipe.h"
    
    PIPE::PIPE()
    {
    
    }
    
    PIPE::~PIPE()
    {
    
    }
    
    char *PIPE::_pipe(const char *command, const char *type,char  *buffer)
    { 
       pd=popen(command,type);//<-hier wird die pipe geöffnet   
       fread(buffer,25,1,pd);
       buffer[25]=0;
       printf("%s",buffer);
       return buffer;
    }
    
    #gui.pro 
    #Datei für den qmake 
    TEMPLATE = app
    CONFIG += qt warn_on release
    SOURCES = gui.cpp pipe.cpp
    HEADERS = pipe.h
    TARGET= gui.bin
    

    Über setzen mit:

    qmake gui.pro
    make
    und müsste funktionieren
    ############################################################
    Ersatztprogramm für das Simulator-Programm.

    /*steurung.c*/
    #include <stdio.h>
    
    int main(int argc,char *argv[])
    { 
      printf("AUS DEM STEURUNGSPRORGAMM");//<-Hier wird in stdout geschrien
      return 0;
    }
    

    Übersetzen mit:
    gcc steurung.c -o steurung.bin

    Ja, ich weiss das es extrem schlechter Stil ist C und C++ so zu mischen, und überhaupt ist das ganze zimmlich unsauber Programmiert aber ich hoffe, hilft dir weiter.

    Ich habe in diesem Beispiel nur einen Text aus dem andren Programm ein geblendet.
    Selbst verstendlich muss du dann endsprechende Funktionen oder Klassen programieren die, die Daten die aus dem Simulator-Programm kommen, endsprechend Darstellen.



  • Super !!
    Damit komme ich bestimmt ein Stück weiter!!

    Ich hoffe ich darf da bei Schwierigkeiten nochmals nachfragen ???

    Danke für die klasse Antwort,

    Frank 🙂 🙂 🙂



  • Ich hoffe ich darf da bei Schwierigkeiten nochmals nachfragen ???

    Und ich hoffe ich kann dann weiter helfen, oder jemand anders.

    [OFFTOPIC]
    Nicht viele Leute nennen sich FrankyBoy.
    Bist du zufällig FrankyBoy aus dem PureBasic Forum ?
    [/OFFTOPIC]



  • Nee bin ich nicht!!

    So wurde ich als Kind immer gerufen und der hat sich seid dem irgendwie gehalten.
    Da kann man sich ja nicht wehren!!!

    Bis denn,

    frank


Anmelden zum Antworten