Hinweis: Das Forum wird geschlossen! Neue Registrierungen sind nicht mehr möglich!

 Zurück zu Pro-Linux   Foren-Übersicht   FAQ     Suchen    Mitgliederliste
Threads beenden

 
Neuen Beitrag schreiben   Auf Beitrag antworten    Pro-Linux Foren-Übersicht -> Programmieren - C
Vorheriges Thema anzeigen :: Nächstes Thema anzeigen  
Autor Nachricht
Christoph
Gast





BeitragVerfasst am: 23. Mai 2002 13:57   Titel: Threads beenden

Hallo,
ich habe folgendes Programm:

code:

int main(int argc, char *argv[])
{
pthread_t th1, th2;
void *ret;

if (pthread_create(&th1, NULL, serverControl, NULL) < 0)
{
fprintf (stderr, "pthread_create error for thread 1");
exit (1);
}

if (pthread_create(&th2, NULL, serverLoop, NULL) < 0)
{
fprintf (stderr, "pthread_create error for thread 2");
exit (1);
}
return 0;
}



Nun meine Frage:
wie kann ich in serverControl den Thread serverLoop beenden und wieder ins main zurückkehren?

Danke.
 

pauls
Gast





BeitragVerfasst am: 26. Mai 2002 18:54   Titel: Re: Threads beenden

Also am einfachsten durch eine Globales bitflag...

einfach irgenwo Global ein int done = 0;

dann im loop in serverLoop ein:

while(!done /* andere abruchbedingungen */){//...do work...}

und in serverControl:

//stop the serverLoop
done = 1;

wenn du dann in der main weiter machen willst wenn th2 das serverLoop verlassen hat einfach:

pthread_join(th2, &ret);
//hier bin ich nur nachdem th2 beendet ist

wobei ret ein int ist (und den return wert von serverLoop enthält)

bis denne...

pauls
 

Christoph
Gast





BeitragVerfasst am: 26. Mai 2002 20:40   Titel: Re: Threads beenden

Vielen Dank für Deine Antwort!
Allerdings brauche ich eine richtig "harte" Methode, um serverLoop zu beenden, da es eine blockierende Funktion ist (recv()).
Hast Du vielleicht eine Idee?
Vielen Dank im Voraus,
Christoph
 

pauls
Gast





BeitragVerfasst am: 31. Mai 2002 14:55   Titel: Re: Threads beenden

also dann hielft dir eigentlich nur aus dem blockieren ein nicht blockieren zu machen...
z.b. indem du ein select(...) auf den descriptor machst (man select) da gibts dann auch ein timeout...
oder du setzt einen Interupt der dich in regelmäßigen abständen aufweckt aber das ist dann schon seeeeehhhr dreckig!

eine andere Methode gibt es meines wissens nach nicht!

schau dir select an und dann frag einfach das globale flag ab wenn der timeout kam und du kannst aufhören (siehe letzte message)

bis denne...
 

Christoph
Gast





BeitragVerfasst am: 31. Mai 2002 18:59   Titel: Re: Threads beenden

Vielen Dank pauls!
Polling mittels select() funktioniert einwandfrei.
Christoph
 

Beiträge vom vorherigen Thema anzeigen:   
     Pro-Linux Foren-Übersicht -> Programmieren - C Alle Zeiten sind GMT + 1 Stunde
Seite 1 von 1

 
Gehen Sie zu:  

Powered by phpBB © phpBB Group
pro_linux Theme © 2004 by Mandaxy