ich weiß das das Thema schon öfter behandelt wurde. Aber irgendwie konnte ich die Information die ich gerne hätte nicht finden. Ich stelle mir folgende Klasse vor:
Dieses Grundgerüst wird am Anfang des Programmes mit dem CTR mit den beiden parametern aufgerufen und somit ein Connection erstellt. Ich stelle mir dann vor das diese Klasse später im Programm und auch in anderen Threads immer wieder ohne Parameter konstruiert wird. Ist das ein denkbares und korrrektes Vorgehen?
Ich halte ein solches "ConnectionManagement" für sinnvoll, sehe jedoch in diesem konkreten Code folgende Probleme:
1. open/close
In meiner Implementierung öffnet die erste Instanz die Verbindung (open()), die letzte Instanz schliesst sie wieder (close()) und alle dazwischen testen sie (if (!db.isOpen()) db.open()). Dein mehrfaches open() (im CTor) und close() (im DTor) halt ich nicht für richtig.
2. Multithreading
In der Doku steht klar: "A connection can only be used from within the thread that created it". Das ist bei dir nicht der Fall. Du hast für alle Threads nur _eine_ Connection. Richtig wäre IMHO, dass dein Management abhängig des "QThread::currentThread()" Connections generiert. Also kannst du keine Konstante für den ConnectionName nehmen, sonder was vom Thread abhängiges. Auch das Reference-Counting müsste natürlich abhängig des Threads funktionieren.
Zusammengefasst: verwalte eine Liste von Connections, nicht _eine_ Connection.
solarix hat geschrieben:1. open/close
In meiner Implementierung öffnet die erste Instanz die Verbindung (open()), die letzte Instanz schliesst sie wieder (close()) und alle dazwischen testen sie (if (!db.isOpen()) db.open()). Dein mehrfaches open() (im CTor) und close() (im DTor) halt ich nicht für richtig.
Da dachte ich das eventuell timeouts ansonsten das clsoe() implizit machen und man dann Probeme bekommt. Deshalb das open() jedesmal. Ist das also nicht okay?