pthread terminieren



  • Guten morgen,
    ich habe folgendes problem. Es besteht die gefahr das in einem Thread theoretisch einen endlosschleife ensteht. (Der thread läuft in einer library und ruft eine callback Funktion auf, auf welche ich keinen Einfluss habe)

    void *ThreadCmd (void *ch){
    	pthread_mutex_lock( &CmdMutex );
    	while (1){};
    	pthread_mutex_unlock(&CmdMutex);
    }
    
    struct timespec   ts;
    struct timeval    tp;
    gettimeofday(&tp, NULL);
    ts.tv_sec  = tp.tv_sec;
    ts.tv_nsec = tp.tv_usec * 1000 + CMD_TIMEOUT*1000000;
    
    pthread_create (&hThread_Cmd, NULL, ThreadCmd , NULL);
    if (ETIMEDOUT == pthread_cond_timedwait(&CmdCond, &CmdMutex , &ts)){
    	// Hier muss der Thread "ThreadCmd" abgebrochen werden
    	pthread_mutex_unlock(&CmdMutex);
    }
    

    Wie kann ich den Thread abbrechen?
    mit pthread_cancel läuft der thread im Hintergrund weiter (sieht man an der 100% cpu Auslastung und mit hilfe von pstree).
    mit pthread_kill beende ich auch das Programm in welchem die library eingebunden ist.

    Weiß jemand ob und wie das machbar ist? Hatte gestern schon stunden gesucht und alles mögliche ausprobiert, aber leider hatte nichts davon funktioniert.
    Danke schonmal 🙂



  • pthread_setcanceltype(PTHREAD_CANCEL_ASYNCHRONOUS, NULL)

    das sollte dir weiter helfen 🙂


Anmelden zum Antworten