Ich arbeite derzeit an einem Multi-Client-Server, der select()
verwendet, um mehrere Clients zu behandeln. Wenn ein Client jedoch eine Nachricht sendet, die umfangreiche Berechnungen erfordert, muss ich unter Verwendung von pthread_create()
einen neuen Thread erstellen, damit mein Server auf andere Nachrichten von Clients reagieren kann. Sobald die Berechnung für diesen Client durchgeführt wurde, muss ich eine Nachricht an den Client zurückgeben können. Aber ich bin mir nicht sicher, wie ich wissen kann, ob dieser Thread fertig ist und wie man das Endergebnis erhält. Offensichtlich kann ich pthread_join()
nicht verwenden, da das mein Serverprogramm während der Ausführung dieses neuen Threads blockiert. Also bietet C eine Funktion, die ich verwenden kann, um das Endergebnis dieses untergeordneten Threads zu erhalten? Ich möchte auch vermeiden, globale Variablen zu verwenden.C - pthread verwenden und auf einen Rückgabewert warten
Antwort
können Sie einfach überprüfen, ob der Faden aus dem Haupt-Thread, bevor er (der nicht blockierende sein wird) beendet hat
Sie sollten bekommen, wie es von hier zu tun: How do you query a pthread to see if it is still running?
Ansonsten können Sie wahrscheinlich Senden Sie einfach die Antwort vom untergeordneten Thread zurück, Sie können Verbindungsinformationen als Parameter der Thread-Funktion übergeben.
Wenn der untergeordnete Thread den Thread, der in select()
wartet, wenn die Verarbeitung abgeschlossen ist, aktivieren soll, können Sie pipe()
verwenden, um eine Pipe zu erstellen. Der Thread, der select()
aufruft, fügt der Dateideskriptorgruppe die Leseseite der Pipe hinzu, und der untergeordnete Thread schreibt auf die Schreibseite der Pipe, wenn sie ihre Arbeit beendet hat.
Sie können sogar das Ergebnis über die Pipe senden, wenn das Ergebnis nicht zu groß ist.
- 1. pthread anders als warten und signalisieren
- 2. Warten auf PHP Callback auf Objektinstanz und Rückgabewert auf Funktion
- 3. Wie mache ich Python auf einen Rückgabewert begrenzte Zeit warten?
- 4. Rückgabewert auf einen Objektverweis
- 5. Wie warten auf Rückgabewert von $ .getJson
- 6. Pthread nicht für Mutex-Sperre warten threadFinished
- 7. Pthread einen Thread Zyklus basierend auf Benutzereingaben
- 8. C - pthread Argumente
- 9. Warten auf Workbook.RefreshAll() (C#)
- 10. Synchronisieren Zugriff auf einen Rückgabewert
- 11. Pthread wird in C
- 12. Einfacher Pthread! C++
- 13. Detect wartende Threads in C Pthread
- 14. C Pthread, Zeiger verliert Inhalt
- 15. Warten auf den Callback-Rückgabewert einer asynchronen Methode?
- 16. Threads in C, C++, C++ 0x, Pthread und steigern
- 17. Verwendung von Pthread in C++
- 18. Wie beenden ich einen Thread auf @synchronized Ziel C warten
- 19. Pthread und Wartebedingungen
- 20. in Bezug auf Pthread Mutex Verwendung
- 21. C: sscanf Zuweisung Unterdrückung und der Rückgabewert
- 22. Multi-Threads Programmarchitektur C Pthread
- 23. C++: Pthread Statusüberwachung unter Linux
- 24. C++ Warten auf mehrere Threads
- 25. C# WinForms: Warten auf einen Knopf drücken innerhalb einer Endlosschleife
- 26. Wie auf einen Controller Rückgabewert in Javascript
- 27. AutoResetEvent und warten auf
- 28. Sind Pthread-Barrieren in C wiederverwendbar?
- 29. Powershell verwenden Rückgabewert auf eine andere Funktion
- 30. Kill einen Prozess und warten auf den Prozess zu beenden
'Also bietet C eine Funktion, die ich verwenden kann, um das Endergebnis dieses untergeordneten Threads zu erhalten?' Ja, wählen Sie(). – ThingyWotsit
Alternativ übergeben Sie den Thread das entsprechende fd und lassen Sie es direkt antworten. – ThingyWotsit
@ThingyWotsit Ich dachte, Select() funktioniert nur auf Dateideskriptoren: | –