Problem beim Beenden des Programms



  • Hallo ich hoffe ihr könnt mir helfen. Erstmal der Code

    #include "conio.h"
    #include "Tserial.h"
    #include "stdio.h"
    #define ESC 27
    char taste;
    int c;
    int main(){
    Tserial*com;
    FILE*datei;
    com=new Tserial();
    while(taste != ESC)
    { 
    datei=fopen("c:\\asdf.txt","a"); //zum öffnen der Datei
    com->connect("COM1", 9600 , spNONE); //Öffnen des Ports
    c = (int) com->getChar(); //warten auf Zeichen vom anderen PC
    printf("%c",c); //AUsgabe inner DOSBox
    fprintf(datei,"%c",c); //Ausgabe in der Textdatei
    fclose(datei); //Schliessen der DAtei
    com->disconnect(); //Port zumachen 
    }
    return 0;
    }
    

    Das Programm soll von einer Seriellen Schnittstelle alles mitschreiben (was es auch tut) und sobald ich die Taste ESCAPE drücke soll er Programm schliessen.
    (was er nicht tut)
    Ausserdem will ich das er Tasten "äöü" korrekt ausgibt, da er diese Zeichen nicht erkennt. Die verwendete "Class" (wenn man das so nennt) ist TSerial aber ich glaube das braucht man nicht zu wissen da ich nur wissen will was ich falsch mache da ich das Programm ja nicht beenden kann.

    [[PC welcher Daten übers Hyperterminal abschickt]]---|Kabel|----[[2.PC und Mein Programm welches die Daten empfängt und von wo man mit ESC dsa Programm beenden soll]]



  • naja, du liest "taste" nirgends ein. wenn du das tuen möchtest, aber die schleife gleichzeitig weiterlaufen soll, musst du threads verwenden.



  • Nicht zwangsläufig.



  • Danke shconmal für die schnellen Antworten, aber wie genau geht das mit den "threads" gibts da irgendwelche Tutorials weil ich davon keinen Plan habe und erst seit 2 Wochen Programmiere.



  • Bjo3rN schrieb:

    Danke shconmal für die schnellen Antworten, aber wie genau geht das mit den "threads" gibts da irgendwelche Tutorials weil ich davon keinen Plan habe und erst seit 2 Wochen Programmiere.

    Nix für ungut, aber lern lieber mal die Grundlagen.
    Mit boost::thread sind Threads zwar recht bequem zu verwenden, aber wenn Du erst zwei Wochen programmierst, ist das eindeutig noch zu früh für Dich.



  • Ich mache gerade mein 3 wöchiges Betriebspraktikum und der Betreuer hat mir halt die Aufgabe gegeben, die ich bis hierhin auch recht schnell gelöst hatte.



  • Könntet ihr mir nicht noch etwas genauere Angaben geben was ich da verwenden soll. Ich finde da noch nichts.
    http://www.boost.org/doc/html/threads.html
    Dies habe ich jetzt herausgesucht aber irgendwie scheint das sehr kompliziert zu sein.



  • Nö, ist nicht kompliziert. Du muß eigentlich nur boost erstmal installieren, dann die Headers benutzen, die Libs und DLLs in dein Projekt hinzufügen und schon kann man mit zwei bis drei Zeilen Code einen Thread starten.

    Jemand der die Grundlagen drauf hat, mit seinem Compiler, IDE und C++ umzugehen, macht das in zwei Minuten. (die Boost-Installation zähle ich nicht dazu, weil die einmalig istalliert werden muß...)



  • Welchen Compiler benutzt du denn?



  • Ich benutze Visual C++.
    Brauch man für die Installation Admin Rechte auf dem PC?
    Die habe ich nicht, da ich hier nur mein Praktikum mache.



  • Und welche Version?

    Dann probier mal meine Installationsanleitung:

    http://www.kharchi.de/Boost_Installation.html

    Die ist aber für VC++7.1. Wenn du VC++7.0 oder 6.0 hast, mußt du aus Step 8 den Abschnitt "-sTOOLS=vc-7_1" entsprechend auf "-sTOOLS=vc7" bzw. für 6.0 auf "-sTOOLS=msvc" ändern.

    Ob man Admin-Rechte benötigt, denke ich nicht, da er hauptsächlich nur compiliert und Libs erstellt. Zumindest mußt du Schreibrechte auf eines der Laufwerke haben.



  • Die Boostklasse kann ich nicht installieren, da es entpackt ja 500mb gross ist und die Festplatte hier nichts mehr frei hat.
    Ich hatte mich gestern mit dem Azubi zusammengesetzt und wir haben nach "nonblocking keyboard query" und ähnlichen gesucht, aber waren noch nicht fündig geworden. Kann man das nicht mit einem wait machen bzw ohne eine Class zu benutzen?
    So sieht das Programm mitlerweile aus

    #include <conio.h>
    #include "Tserial.h"
    #include <stdio.h>
    
    #include <windows.h>
    #define ESC 27
    char taste;
    int c;
    int main(){
    
    	Tserial*com;
    	FILE*datei;
    
    	// Initialisierung (Seriellen Port und eine Datei öffnen)
    	com=new Tserial();
    	com->connect("COM1", 9600 , spNONE);
    
    	datei=fopen("c:\\asdf.txt","a");
    
    // Programmschleife (Seriellen Port abfragen und bei Tastendruck Programm beenden)
    	while(taste != ESC){	
    		if (com->getNbrOfBytes()>0)	{
    			c = (int) com->getChar();
    			printf("%c",c);   
    			fprintf(datei,"%c",c);
    		} else {
    			// System entlasten
    			Sleep(250);
    		}
    
    		//if (feof(stdin)) printf("EOF on STDIN\n"); //wirkungslos!
    

Anmelden zum Antworten