Pthread wie richtig beenden ?



  • Guten Abend,
    ich versuche eine Steterung für einige Platinen zu erstellen, wobei ich mit Pthreads versuche.
    In der Steuerung habe ich bislang zwei Threads , einmal zur abfrage der Ein und Ausgänge, desweiteren einen Thread der mit die RS232 abfragt.
    Um diesen thread geht es mir denn den ersten Thread beende ich mit einen break welches Beim zweiten nicht geht, bzw erst geht wenn die RS232 ein datensatz bekommt. Kann ich diesen Thread dennoch auber beenden das er Speicher usw alles Freigibt ?

    Mfg Michael

    /*****************************************************************************
     *                                 Threads                                   *
     *****************************************************************************/
    void* read_RS232thread (void*)
        {
         for (;;)
            {
             if (stopp) break;
             string lese;
             ifstream readrs232("/dev/cuad1",ios::in);
             readrs232 >> lese;
             pthread_mutex_lock (&rs232mutex);
             stringcuad1 = lese;
             pthread_mutex_unlock (&rs232mutex);
             readrs232.close();
             sleep(5);
            }
            return 0;
        }
    
    void* controlthread (void*)
         {
          for (;;)
             {
              if (stopp) break;
              readinputs();
              readoutputs();
              single_shutter(0,0,1,30);
              momentary_switch(1,2,1,43200);
              output_follows_input(2,3,10);
              input_output_delayed_in_time(12,14,10,10,10);
              writeoutputs();
              usleep(250000);
             }
          return 0;
         }
    
    /*****************************************************************************
     *                                 MAIN menu                                 *
     *****************************************************************************/
    int main(int argc, char *argv[])
       {
        pthread_mutex_init ( &inputmutex, NULL );
        pthread_mutex_init ( &outputmutex, NULL );
        pthread_mutex_init ( &rs232mutex, NULL );
    
        to_fill_memory_with_zero();
    
        pthread_t threadrs232thread;
        pthread_t threadcontrolthread;
        pthread_create( &threadrs232thread, NULL, read_RS232thread, NULL );
        pthread_create( &threadcontrolthread, NULL, controlthread, NULL );
    
    for (int i = 0; i < 100; i++ )
           { 
            cout << i <<"\n";
            pthread_mutex_lock (&rs232mutex);
            cout << stringcuad1;
            stringcuad1.erase(); // string löschen
            pthread_mutex_unlock (&rs232mutex);
            usleep(250000);
           }
       stopp = 1;
       pthread_join(threadrs232thread, NULL);
       pthread_join(threadcontrolthread, NULL);
       return 0;
       }
    

    nachtrag: UNIX Betriebsystem Freebsd



  • Dieser Thread wurde von Moderator/in rüdiger aus dem Forum Rund um die Programmierung 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.


Log in to reply