Ich arbeite an einem Uni-Projekt, das aus einer Art Multithread-Server besteht ... Ich bemerkte, dass, wenn ein Testskript ausgeführt wird, das Programm normal endet, aber stecken bleibt bei der Rückgabeanweisung.C-Programm wird nicht beendet
Ausführlicher erklären, habe ich einen Haupt-Thread und mehrere andere Threads. Wenn das Testskript endet, sendet es ein SIGQUIT-Signal an den Prozess. Einer meiner Threads fängt dieses Signal ab, gibt einige Sachen frei und setzt ein Flag, das dem Hauptthread mitteilt, dass die Säuberung gestartet werden soll, dann wird es beendet.
Der Haupt-Thread führt die Bereinigung durch eine pthread_join auf allen anderen Threads zu tun und ruft dann Rückkehr 0.
I geprüft, indem ein printf vor der Rückkehr-Anweisung in der Signalbehandlungsroutine Gewinde und vor der Rücksprungbefehl in puttin das Haupt, und beide werden gedruckt, aber das Programm bleibt stecken.
(beachten Sie, dass für die Haupt-Thread die return-Anweisung zu erreichen, werden alle anderen Seite Threads beendet ist, wie ich für jede dieser wartete)
Willkommen. Bitte lesen Sie die Seiten [Über] und [Fragen] bald. Viel dringender, es gibt nichts, was wir tun können, außer diese Frage zu halten, es sei denn, Sie zeigen uns den Code - wir brauchen einen MCVE ([MCVE]), um helfen zu können. Es gibt endlose Dinge, die schief gehen könnten, um Ihr Programm endlos zu machen; Ohne den Code können wir nicht anfangen zu erraten, wie erfinderisch und clever Sie gewesen sind. –
Nun, ich weiß ehrlich nicht, welchen Code zu setzen, da es 7000+ Zeilen von ziemlich komplizierten Code ist ... Durch Zufall, das Problem selbst behoben, ich weiß nicht wie, aber nach ein paar Mal es erneut versuchen fing gerade an, gut zu arbeiten, ich denke, es war ein OS-Problem dann – NokiStrawby
Und wir sollen raten, was Sie falsch in mehr als 7000 Zeilen Code haben. Hier kommt das M in MCVE (minimal) ins Spiel. Du musst an deinem Code arbeiten, ihn am Laufen halten (oder vielmehr auf die gleiche Art und Weise versagen), während du alles entfernst, was überflüssig ist. Siehe auch SSCCE ([Simple, Self-Contained, Complete/Compilable Beispiel] (http://sscce.org/)). –