Threads funktionieren nciht immer

Alles rund um die Programmierung mit Qt
C167
Beiträge: 105
Registriert: 9. Februar 2008 20:30

Beitrag von C167 »

also, nur damit ich hier mal durchblicke: start() erzeugt ein thread-objekt?
RHBaum hat geschrieben:Lest noch mal die Doku zu dem SQL Modul bitte ...
Also ich habs so verstanden, das alle SQL Befehle aus dem selben thread kommen muessen wo auch die COnnection erstellt wurde. Alles andere waere undefiniertes verhalten ....
Was sie ja auch tun, die Verbindung wird ja innerhalb von run() aufgebaut, ein query abgeschickt und dann wieder beendet
RHBaum hat geschrieben:@C167
fuer dich wuerde das heissen, du musst / kannst deine SQL zugriffe schon vom gui thread entkoppeln, aber muesstest alle aufrufe die auf die DB gehen wieder auf den einen SQL thread mappen ....
die waitkondition koenntest nutzen, um den SQL thread loslaufen zu lassen ...
Trotzdem brauchtest vielleichtne art queue wo "kommandos" vom Gui thread entkoppelst, und die muesstest dann schuetzen , das geht mit nem mutex ...

Ciao ...
Ich hab bisher die Geschichte mit den Mutexen so verstanden, dass Threads blockieren, wenn sie versuchen einen gelockten Mutex fuer sich zu locken und erst weiterlaufen wenn sie das lock bekommen.
RHBaum
Beiträge: 1436
Registriert: 17. Juni 2005 09:58

Beitrag von RHBaum »

Ich hab bisher die Geschichte mit den Mutexen so verstanden, dass Threads blockieren, wenn sie versuchen einen gelockten Mutex fuer sich zu locken und erst weiterlaufen wenn sie das lock bekommen.
Ja genau, iss auch richtig ...

Glaub ich stand irgendwie aufn schlauch .... was mich bissi durcheinander gebracht hat :
Hier redet einer von vielen Threads ??? wie oft wird das run denn aufgerufen ?

auch wenn du ne DB in nem eigenen thread komplett aufmachst, es gibt nen globales DB object ... vielleicht kommt sich das in die quere ? Wobei, sollte eigentlich ned weil es ned benutzt ...

Das mit dem rand fuer eindeutigen namen find ich irgendwie riskant, nimm lieber die Adresse deines objects, die is definitiv eindeutig ... dann weisst auch definitiv welcher thread was ist ....

Wenn debuggst, springen auch alle in deine Run funktion rein ?


Ciao ...
C167
Beiträge: 105
Registriert: 9. Februar 2008 20:30

Beitrag von C167 »

RHBaum hat geschrieben:Glaub ich stand irgendwie aufn schlauch .... was mich bissi durcheinander gebracht hat :
Hier redet einer von vielen Threads ??? wie oft wird das run denn aufgerufen ?
Am Anfang werden 2 Objekte der Klasse erzeugt. eins ruft 3mal start() direkt hinternander auf, das erste nur einmal.
RHBaum hat geschrieben:auch wenn du ne DB in nem eigenen thread komplett aufmachst, es gibt nen globales DB object ... vielleicht kommt sich das in die quere ? Wobei, sollte eigentlich ned weil es ned benutzt ...
Ich verwende ja jeweils nen anderen namen
RHBaum hat geschrieben:Das mit dem rand fuer eindeutigen namen find ich irgendwie riskant, nimm lieber die Adresse deines objects, die is definitiv eindeutig ... dann weisst auch definitiv welcher thread was ist ....

Code: Alles auswählen

QString connectionName = QString ( "thread_%1_%2_%3" ).arg ( qrand() ).arg ( _tableName ).arg ( _id );
Da jede Kombination aus Tabellenname und Id nur einmal aufgerufen wird...
RHBaum hat geschrieben:Wenn debuggst, springen auch alle in deine Run funktion rein ?
Wenn ich den gdb entsprechend getreten habe, dass er tut was ich will ;) Noch bin ich am Lesen der Doku
Antworten