Windows Azure Cloud Storage ermöglicht es Ihnen bereits ab 0,10€ pro GB/Monat die Vorteile der Cloud zu nutzen.
Hypercell ein ] Hypercell aus ] Zeige Navigation ] Verstecke Navigation ]
c++.de  
   
Advanced Developers Conference     
Bücher-Shop mit Amazon (Buchkategorien)C++ : Referenzen zu C++ : C++ Builder : Visual C++ : C# : Java : Spieleprogrammierung : Systemprogrammierung Linux : Software-Entwicklung : .NET : Compilertechnik : Algorithmen & Datenstrukturen : Objektorientierung : Entwurfsmuster : UML : eXtreme Programming : Scrum : Projektmanagement : Software-Testing : Datenbanken : Tom DeMarco : Dilbert : User Friendly
C/C++ Forum :: Linux/Unix ::  pthread terminieren     Zeige alle Beiträge auf einer Seite Auf Beitrag antworten
Autor Nachricht
sash
Mitglied

Benutzerprofil
Anmeldungsdatum: 21.11.2007
Beiträge: 15
Beitrag sash Mitglied 07:24:43 31.08.2010   Titel:   pthread terminieren            Zitieren

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)

Code:
void *ThreadCmd (void *ch){
    pthread_mutex_lock( &CmdMutex );
    while (1){};
    pthread_mutex_unlock(&CmdMutex);
}
Code:
void *ThreadCmd (void *ch){
pthread_mutex_lock( &CmdMutex );
while (1){};
pthread_mutex_unlock(&CmdMutex);
}
Code:
void *ThreadCmd (void *ch){
    pthread_mutex_lock( &CmdMutex );
    while (1){};
    pthread_mutex_unlock(&CmdMutex);
}


Code:
1
2
3
4
5
6
7
8
9
10
11
1
2
3
4
5
6
7
8
9
10
11
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);
}
Code:
1
2
3
4
5
6
7
8
9
10
11
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);
}
Code:
1
2
3
4
5
6
7
8
9
10
11
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 :)
nutzer523567
Unregistrierter




Beitrag nutzer523567 Unregistrierter 15:25:59 31.08.2010   Titel:              Zitieren

pthread_setcanceltype(PTHREAD_CANCEL_ASYNCHRONOUS, NULL)

das sollte dir weiter helfen :-)
C/C++ Forum :: Linux/Unix ::  pthread terminieren   Auf Beitrag antworten

Zeige alle Beiträge auf einer Seite




Nächstes Thema anzeigen
Vorheriges Thema anzeigen
Sie können Beiträge in dieses Forum schreiben.
Sie können auf Beiträge in diesem Forum antworten.
Sie können Ihre Beiträge in diesem Forum nicht bearbeiten.
Sie können Ihre Beiträge in diesem Forum nicht löschen.
Sie können an Umfragen in diesem Forum nicht mitmachen.

Powered by phpBB © 2001, 2002 phpBB Group :: FI Theme

c++.de ist Teilnehmer des Partnerprogramms von Amazon Europe S.à.r.l. und Partner des Werbeprogramms, das zur Bereitstellung eines Mediums für Websites konzipiert wurde, mittels dessen durch die Platzierung von Werbeanzeigen und Links zu amazon.de Werbekostenerstattung verdient werden kann.

Die Vervielfältigung der auf den Seiten www.c-plusplus.de, www.c-plusplus.info, www.c-sar.de, www.c-plusplus.net und www.baeckmann.de enthaltenen Informationen ohne eine schriftliche Genehmigung des Seitenbetreibers ist untersagt (vgl. §4 Urheberrechtsgesetz). Die Nutzung und Änderung der vorgestellten Strukturen und Verfahren in privaten und kommerziellen Softwareanwendungen ist ausdrücklich erlaubt, soweit keine Rechte Dritter verletzt werden. Der Seitenbetreiber übernimmt keine Gewähr für die Funktion einzelner Beiträge oder Programmfragmente, insbesondere übernimmt er keine Haftung für eventuelle aus dem Gebrauch entstehenden Folgeschäden.