classen-instanzen unterscheiden
-
Hallo forum
( hoffe, im richtigen Thrad zu sein ( Linux und Windows))Mein Datenbanksystem verlangt für den open()-Aufruf die Übergabe einer STRUC
typedef struct { char networkAndNode[12]; char applicationID[2]; unsigned short threadID; } CLIENT_ID; CLIENT_ID clientId;Die Instanzen unterscheiden sich schon im Dateinamen, aber wenn ich die gleiche Datei mwhr als einmal in einem Quelltext öffnen/schließen möchte, sollte die struc schon unterschiedliche Werte haben. ( sonst schließt der Manager ALLE dateien gleichen Namens!!)
applicationId gilt fürs Programm.
für networkAndNode und threadId fehlen mir Ideen.
Unter Linux wäre ja eventuell "ps" ne Möglichkeit.Oder - fällt mir bein SChreiben ein -:
Könnte ich eine static-variable declarieren, die sich mit jeder neuen Instanz hochzählt?Wie wäre das zu implementieren?
Danke Hanns
-
der typedef, den du da benutzt, sieht mir ein bisschen seltsam aus, was spricht gegen ein einfaches
struct CLIENT_ID { ... };für die Instanzen-ID wäre folgendes machbar:
class CLIENT_ID //class, wegen des konstruktors { //... private: static unsigned int max_instance_id; const unigned int instance_id; public: //Im Konstruktor wird erst die maximale id um eins vergrößert //und dann bekommt die neue instanz diese ID CLIENT_ID() : instance_id(++max_instance_id) //... }; //die statische variable wird einmal mit 0 initialisiert, //so dass die erste Instanz die id 1 bekommt CLIENT_ID::max_instance_id = 0;Das funktioniert, solang du im Leben des Programmes nicht mehr als MAX_UNSIGNED_INT Instanzen erzeugst (auch nicht nacheinander).
Sollten es doch so viele werden, wird noch ein Verwalterobjekt nötig, das
weiß, welche InstanzIDs noch frei sind, dann können MAX_UNSIGNED_INT Instanzen gleichzeitig exisiteren und beliebig viele hintereinander...
-
pumuckl schrieb:
der typedef, den du da benutzt, sieht mir ein bisschen seltsam aus, was spricht gegen ein einfaches
struct CLIENT_ID { ... };Die Aufruf-Funktion über die der gesamte Transfer verläuft, erwartet als letzten Parameter die Adresse einer struct, die genau die entsprechende Anzahl Bytes enthält. Die Member sind daher nciht z.b. vom Typ char, sondern BTI_CHAR,BTI_WORD die entsprechend der programmiersprache #defined werden.
Daher dürfte es wohl mit ner eigenen Klasse auch nciht klappen.
ich werde mal Deine Idee in meine Klasse einbauen:class btrieve { //... private: static unsigned int max_instance_id; const unigned int instance_id; public: //Im Konstruktor wird erst die maximale id um eins vergrößert //und dann bekommt die neue instanz diese ID client_ID.threadID = (++max_instance_id >MAX_UNSIGNED_INT ? 0 : max_instance_id); //... };die struct mus natürlich Element der classe sein.
ich versuchs mal, und berichte dann ,
danke erst mal