zwei Funktion gleichteitig

Tutorials.at
Verfügbare Informationen zu "zwei Funktion gleichteitig"

  • Qualität des Beitrags: 0 Sterne
  • Beteiligte Poster: Elch - DrPhil_Guth - Dirty Oerty - AQE89 - wirthi
  • Forum: Tutorials.at
  • Forenbeschreibung: Programmierforum
  • aus dem Unterforum: C / C++
  • Antworten: 8
  • Forum gestartet am: Mittwoch 19.04.2006
  • Sprache: deutsch
  • Link zum Originaltopic: zwei Funktion gleichteitig
  • Letzte Antwort: vor 15 Jahren, 7 Monaten, 5 Tagen, 1 Stunde, 6 Minuten
  • Alle Beiträge und Antworten zu "zwei Funktion gleichteitig"

    Re: zwei Funktion gleichteitig

    Elch - 20.08.2007, 21:36

    zwei Funktion gleichteitig
    Hi,
    Ich hab mal wieder eine Frage :oops::
    gibt es einen einfachen Weg zwei Funktionen zur gleichen Zeit auszuführen
    (zum Beispiel einen Zähler ununterbrochen laufen zu lassen und gleichzeitig
    trotzdem noch dem normalen Programmablauf folgen, wie zum Beispiel
    Zahlen aus der tastatur einlesen usw... )?
    mfg Elch



    Re: zwei Funktion gleichteitig

    DrPhil_Guth - 21.08.2007, 01:16


    Einen einfachen Weg gibt es nicht. Es gibt nichts dergleichen im Standard.

    Was du willst ist Paralelles Rechnen, und um das zu erzielen gibt es Threads. Du kannst auch mehrere Prozesse Starten und die miteinander kommunizieren lassen.
    Wie gesagt, so einfach ist es nicht.

    Hier mal ein kleines Programm, wie das aussehen könnte. Funktioniert nur unter Linux/Unix, keinen Plan wies unter win32 geht.
    Code: #include <stdio.h>

    #include <sys/types.h>
    #include <unistd.h>


    int main()
    {
       char buffer[50];
       pid_t ret_val;
       int stat;

       ret_val = fork(); /* Hier Programm spalten*/

       if (ret_val < 0) /* Bei fehler Ende*/
          exit(-1);

       if (ret_val == 0) /* Hier arbeitet der 2. Prozess:*/   
       {
          /* Auf eingabe warten */
          fgets(buffer, 50, stdin);
          
          /* wenn fertig dann ende*/
          exit(0);
       }
       else /* Hier arbeitet der erste (eigentliche) Prozess */
       {
          /* "einen Zähler ununterbrochen laufen zu lassen", auch bekannt als "Der CPU killer"*/
          while (1);

          /* Hier auf den Prozess warten*/
          wait(&stat);
       }
       
       
       return 0;
    }

    Naja, so geht das _grundsätzlich_. Nur ist zum beispiel das Array im ersten Prozess nicht gleich dem Zweiten, also wenn du die Prozesse kommunizieren lassen willst, bedarfs IPC (Inter Process Communication).

    Ich kann dir ein paar tolle links zu dem thema geben, aber ich denke nicht dass es im sinne deiner Frage war...


    Ums kurz zu machen, nein, es gibt keine einfachen Wege 2 funktionen gleichzeitig ausführen zu lassen.



    Re: zwei Funktion gleichteitig

    Elch - 21.08.2007, 10:15


    schade...
    aber trotzdem danke fuer die schnelle antwort.
    mfg Elch



    Re: zwei Funktion gleichteitig

    Dirty Oerty - 23.08.2007, 20:33


    hm....um 2 Funktionen WIRKLICH gleichzeitig auszuführen brauchst du einen Rechner mit 2 CPU's^^

    Mit Threads oder mehreren Prozessen erreichst du das "gleichzeitig Ausführen" das man so normal kennt. Dabei wird die ganze Zeit über (durch das Betriebssystem) zwischen den Prozessen/Threads hin und her geschalten. Das natürlich relativ schnell. Dadurch siehts dann so aus als würden mehrere Funktionen gleichzeitig laufen.

    Was mir noch so in den Sinn kommt(nur schnell geschrieben, damit man versteht was ich meine):

    Code:

    int funktion1(int counter)
    {
        return (counter+1);
    }


    int funktionblub_bla_xyz()
    {
        //irgendwas
    }


    int main()
    {
        int zaehler = 0;
        while(/* Abbruchbedingung*/)
        {
            zaehler=funktion1(zaehler);
            funktionblub_bla_xyz();
        }
        return 0;
    }

    Das ist zwar nicht wirklich befriedigend, aber für einen Zähler, der im Hintergrund mitläuft sollte das eigentlich reichen^^
    Hab ja keine Ahnung was du vorhast...

    MfG
    Daniel



    Re: zwei Funktion gleichteitig

    AQE89 - 23.08.2007, 22:04


    Ich habe noch was lustiges für linux gefunden.
    wenn man beim shell befehl ein & ranhenckt wird er im hintergrund ausgeführt.

    Code: system("./count&");  // startet das programm "count". das alte programm solte fortfahren

    wenn man im Programm "count" ein zähler macht:
    Code: do{
    sleep(1);
    count++;
    } while(1);

    und das ganze in ne datei speichert, kann man das ganze vom startprogramm aus lesen.
    und wenn man fertig ist sendet man einfach

    am schluss killt man das ganze mit
    Zitat: system("killall count");

    ist aber eine scheiss lösung, aber es würde gehen.



    Re: zwei Funktion gleichteitig

    Dirty Oerty - 24.08.2007, 00:37


    Das Hauptproblem dabei liegt wohl in den folgenden 2 Punkten:

    1. Wird es problematisch diese Datei zu lesen, in die das Hintergrundprogramm seine Ergebnisse speichert (2 Programme können nicht gleichzeitig auf eine Datei zugreifen)

    Lösen könnte man das evtl mit Inlineassembler. Soweit ich mich erinnere kann man da eine genaue Speicheradresse angeben...und diesen Speicher kann man auch gleichzeitig lesen/schreiben, denk ich mal.

    2. Ist das ganze natürlich auf Linux beschränkt...

    MfG
    Daniel



    Re: zwei Funktion gleichteitig

    wirthi - 24.08.2007, 10:00


    Wenn man schon mit zwei Prozessen/Threads arbeitet, dann sollte man gleich Semaphoren, Shared Memory und messages verwenden. Ist in der anwendung zwar etwas komplizierter, aber viel effektiver und sicherer als über Dateien zu kommunizieren.



    Re: zwei Funktion gleichteitig

    DrPhil_Guth - 24.08.2007, 20:32


    Wie gesagt, das ganze ist um einiges Komplizierter als einfach nur 2 funktionen gleichzeitig auszuführen. Das was wirti vorgeschlagen hat gehört zur Inter Prozess Communication (IPC), was nun mal nicht Trivial und Portabel möglich ist.



    Mit folgendem Code, können Sie den Beitrag ganz bequem auf ihrer Homepage verlinken



    Weitere Beiträge aus dem Forum Tutorials.at

    Falsche Daten bei großen Zahlen - gepostet von DrPhil_Guth am Sonntag 08.10.2006
    Textdatei - Zufallszeile auslesen. - gepostet von Bene am Freitag 28.07.2006
    @Walgo - gepostet von Xin am Samstag 21.07.2007
    Tubo C - gepostet von Michi am Donnerstag 10.08.2006
    C-Programmierumgebung für Vista - gepostet von Franco am Mittwoch 10.10.2007
    --- IDE --- (unbedingt lesen) - gepostet von X am Sonntag 10.09.2006



    Ähnliche Beiträge wie "zwei Funktion gleichteitig"

    Zwei Kinder auf einem Shetty? - schneemandy (Sonntag 23.07.2006)
    Einweisung & Anleitung zur Funktion des abteils - Logro (Montag 26.03.2007)
    Zwei Mönche - superman (Montag 28.08.2006)
    Flames verlängern mit zwei Spielern - starbuck77 (Samstag 02.06.2007)
    Wenn zwei sich streiten (wollen) - Shevas (Donnerstag 15.03.2007)
    Funktion - ivona1 (Samstag 15.04.2006)
    Die zwei wichtigsten Websites - Tyc (Dienstag 29.08.2006)
    Ein Lautsprecherpaar für zwei Receiver - h_katze (Montag 10.10.2005)
    Zwei talente vor Main Roster Push - JM Hardy (Montag 15.10.2007)
    Erweitern von einem auf zwei Räume - drohne (Donnerstag 05.04.2007)