Prozessverwaltungsfrage



  • Und wiedereinmal steh ich voe einem Problem, ich hoffe ihr könnt mir auch dieses mal helfen.

    Ich möchte 2 Prozesse gleichzeitig ablaufen lassen. Einen der die Benutzereingaben abfängt und einer der die Ausgaben, auf der Konsole, steuert.

    Ich habe da an den befehl fork() gedacht. wie ich aber aus meinem aktuellen Howto herauslese...

    http://www.pronix.de/pronix-151.html

    Kann man sie anscheinend nur nacheinander ausführen (bzw. Im Wechsel mit sleep())

    Ist es also überhaupt möglich 2 Prozesse gleichzeitig ablaufen zu lassen und wenn ja wie?

    Ich hab mir auch schon überlegt sie ganz schnell abwechselnd in einer Schleife ablaufen zu lassen, dann sind sie ja auch beinah zeitgleich.



  • Zwei Prozesse in einem Programm? Dann nimmt man dafür Threads! Schau dir mal Boots.Thread an. Auf meiner Homepage gibts auch eine Einführung und mehrere Topics in diesem Forum behandlen auch noch mal Boost Thread.



  • Natürlich laufen die 2 Prozesse gleichzeitig. Da hast du fork() anscheinend nicht verstanden.



  • Wie bekomme ich es nun hin das ein thread sich nur um die eingaben des users kümmert und der andere nur die ausgaben übernimmt?



  • Das ist eine Sache, die man nicht in wenigen Sätzen erklären kann.



  • Ringding schrieb:

    Natürlich laufen die 2 Prozesse gleichzeitig.

    nur wenn du auch mindestens 2 prozessoren hast, naja, selbst dann manchmal nicht. aber zumindest sieht's so aus 😉



  • Storm.Xapek.de schrieb:

    Wie bekomme ich es nun hin das ein thread sich nur um die eingaben des users kümmert und der andere nur die ausgaben übernimmt?

    du machst eine funktion, die sich um die eingaben des users kümmert. Dann startest du in deinem Hauptprogramm einen Thread mit dieser Funktion und im Hauptprogramm kümmerst du dich dann um die ausgaben.

    mfg.



  • Bei mir sieht das im Augenblick jetzt so aus:

    //main.cpp
    //Auruf der Threads
    //Storm 2006
    
    #include "header.h"
    #include "thread1.cpp"
    #include "thread2.cpp"
    
    int main() {
    
    pthread_t th[2];
    char buf[255];
    
    pthread_create(&th[1], NULL, &thread1, buf);
    pthread_create(&th[2], NULL, &thread2, buf);
    
    storm::sleep(20);
    
    return 0;
    }
    
    //thread1.cpp
    //funktion die thread1 steuert
    //Storm 2006
    
    void* thread1 (void *name) {
    
      while(1) {
    	int r;
    
    	r = ungepufferte_eingabe(0,&input);
    	if (r==-1) exit(1);
    	if (r) {
    		if (-1==write(1,&input,1)) 
    			perror("write");
    	}
    }
    
    return NULL;
    }
    
    //thread2.cpp
    //funktion die thread2 steuert
    //Storm 2006
    
    void* thread2 (void *name) {
    
    char output;
      while(1) {
        if(input == '\0')
          continue;
        output = input;
        //input = '\0';
        cout << output;
    }
    
    return NULL;
    
    }
    

    Funktioniert auch wie geplant. Ich weiß nicht ob das mit der input Variablen die von beiden genutzt wird ne gute idee war.

    Gibts von eurer Seite was auszusetzen?
    (ungepufferte_eingabe hab ich aus dem web gezogen, dürfte klar sein, denk ich)

    Wer sich über den Sinn des Programms wundert, dem sei gesagt es ist noch nicht fertig, die ausgabe ist ja noch völlig sinnlos)



  • net schrieb:

    nur wenn du auch mindestens 2 prozessoren hast, naja, selbst dann manchmal nicht. aber zumindest sieht's so aus 😉

    HT reicht auch. Aber es wäre doch sehr unschön, bei den Systemanforderungen schreiben zu müssen: "Funktioniert nur auf Einprozessorsystemen", oder?



  • Wo deklarierst du die Input Variable?

    mfg.


Anmelden zum Antworten