Ich habe eine Server-Client-Anwendung in C++ auf Linux geschrieben. Wenn ein Client eine Verbindung mit meinem Server herstellt, erstellt der Server einen Thread, der darauf wartet, dass der Client die auszuführenden Serverbefehle sendet. Die Befehle sind vom Betriebssystem abhängig. Der Thread, mit dem der Client mit dem Server kommuniziert, ruft globale Funktionen auf, die den vom Client gewünschten Befehl ausführen. Also muss ich zwei Funktionen für jeden Betriebssystem-abhängigen Befehl haben, den der Client an den Server zur Ausführung sendet. Alle diese globalen Funktionen sind im selben Header wie die Hauptthread-Funktion definiert. Es wird ein bisschen unordentlich mit all diesen Funktionen für verschiedene Betriebssysteme. Meine Idee ist, zwei Klassen zu schreiben, die WindowsFuncs und LinuxFuncs heißen, die statische Elementfunktionen haben, die den erforderlichen Befehl für das OS ausführen, für das die Klasse entworfen wurde. Was sind einige Stackoverflow-Ideen zum Reinigen meiner Logik?Server-Client-App, ich habe Probleme, eine saubere Möglichkeit, Client-Daten auf der Serverseite zu verarbeiten
0
A
Antwort
0
Dies klingt nicht wie ein Threading-Problem. Klingt wie Sie einfache Vererbung verwenden können.
etwas verwenden wie
abstract class OSMethods {
void listDir();
}
class OSMethodsLinux : OSMethods {
void listDir() { system.exec("ls"); }
}
class OSMethodsWin : OSMethods {
void listDir() { system.exec("dir"); }
}
Dann Server-Client-Verarbeitungscode hat Methode, wie
void accept(Socket s, OSMethods m) {
s.readCommand();
m.listDir(); // or whatever
}
Stellen Sie sicher, korrekte Instanz übergeben entweder Linux oder Win-Klasse zu übernehmen. Also keine statischen Methoden.
Generell habe ich festgestellt, dass Sie keine statischen Methoden in Ihren Programmen benötigen (außer Main), es sei denn, Sie machen clevere Sachen, die meisten Dinge brauchen sie einfach nicht und sie führen zu weniger flexiblem Design.
Verwandte Themen
- 1. Verarbeiten von Webanforderungen auf Serverseite
- 2. Wie Oauth Nonces auf der Serverseite zu verarbeiten?
- 3. Ich habe Probleme, eine Formel zu finden
- 4. Kontrollnummer der Verbindungen auf Serverseite
- 5. jQuery-Vorlagen auf der Serverseite
- 6. Saubere Möglichkeit, verwandte Entitäten basierend auf Auswahl zu erhalten
- 7. Gibt es eine saubere Möglichkeit, sich zu bewegen?
- 8. Reagieren auf der Serverseite
- 9. Ich habe Probleme in der combobox Datenquelle
- 10. Saubere Möglichkeit, '__setattr__` bis nach der Initialisierung zu deaktivieren
- 11. Ich habe Probleme, den Wert der globalen Variablen zu ändern
- 12. Ich habe Probleme mit URL
- 13. Gibt es eine Möglichkeit in CakePHP, eine Sicht auf der Serverseite teilweise neu zu rendern, wenn Daten asynchron angefordert werden?
- 14. Ich habe Probleme die Datei
- 15. Gibt es eine saubere Möglichkeit, in reinem CSS Grenzen auf eine <tbody /> zu bekommen?
- 16. Ich habe Probleme mit JSON
- 17. Einfache Möglichkeit verschachtelte Transaktionen zu verarbeiten
- 18. Ich habe Probleme bei der Installation von pyperclip
- 19. Eingabearten auf der Serverseite steuert
- 20. Ich habe Probleme bei der Installation der django-socialregistration App!
- 21. progressive Erweiterung auf der Serverseite?
- 22. Debug auf Serverseite
- 23. Eine saubere Möglichkeit zum Umwandeln in einen tatsächlichen Objekttyp
- 24. Testen der Flash-Fähigkeit auf der Serverseite
- 25. Ich habe Probleme mit statischen Datentabellen
- 26. Ich habe Probleme mit Pythons `subprocess.popen` hängen
- 27. Javascript eine c-Funktion auf der Serverseite aufrufen
- 28. Was ist eine saubere Möglichkeit, dass der Server eine JavaScript-Funktion zurückgibt, die dann aufgerufen wird?
- 29. Gibt es eine saubere Möglichkeit, beim Vergleichen der Liste <String> den Fall zu ignorieren?
- 30. Ich habe Probleme mit Tkinter GUI-Steuerung
Zufällige Frage: Ich möchte der Thread sicher alle diese Funktionen aufrufen, wo würde ich die Mutex-Variable für diese Klassenmethoden platzieren? – TheFuzz
Fügen Sie einen einzelnen Mutex in die einzelne Instanz von OSMethodsXXX ein, die jede Methode in OSMethodsXXX zu Beginn der Methode erhält und nach Abschluss der Methode freigibt. Stellen Sie sicher, dass Sie nur eine einzige Instanz von OSMethodsXXX erstellen. – DaveC
da ich auf einer Linux-Box aufbaue, wie kann ich Windows-Code dort drin lassen, damit ich es nicht kommentieren muss, bevor ich baue? nur ifdefs? – TheFuzz