Wenn fertig, bitte Fenster schließen
|
// Lösung zu statischen Member // Dateien einbinden #include <iostream> using std::cout; using std::endl; // Klassendefinition class Com { bool hasCom; // COM-Objekt besitzt Schnittstelle static bool comLocked; // statische Verriegelung der Schnittstelle public: Com(); // ctor ~Com(); // dtor bool WriteCom(const char *const pszT); // Ausgabe, belegt Schnittstelle void ReleaseCom(); // Schnittstelle freigeben }; // Statische Eigenschaft definieren und initialisieren bool Com::comLocked = false; // Definition der Memberfunktionen // Konstruktor Com::Com() { // Objekt besitzt Schnittstelle noch nicht hasCom = false; } // Destruktor Com::~Com() { // Falls Objekt Schnittstelle besitzt, diese wieder freigeben if (hasCom) comLocked = false; } // Auf Schnittstelle schreiben bool Com::WriteCom(const char *const pszT) { // Wenn Objekt Schnittstelle besitzt, dann schreiben if (hasCom) cout << pszT << endl; else { // Falls Schnittstelle nicht belegt ist if (!comLocked) { // Schnittstelle belegen und Objekt besitzt jetzt Schnittstelle comLocked = true; hasCom = true; // Auf Schnittstelle schreiben cout << pszT << endl; } else { // Anderes Objekt besitzt Schnittstelle cout << "FEHLER: COM-Port belegt!\n"; return false; } } return true; } // Schnittstelle freigeben void Com::ReleaseCom() { // Falls Objekt die Schnittstelle besitzt if (hasCom) { // Schnittstelle freigeben hasCom = false; comLocked = false; } } // 2 COM-Objekte erstellen Com ComA; Com ComB; // main() Funktion int main() { // 1. COM-Objekt schreibt auf Schnittstelle ComA.WriteCom("1. Schreiben von Objekt A"); ComA.WriteCom("2. Schreiben von Objekt A"); // 2. COM-Objekt versucht nun auf Schnittstelle zu schreiben ComB.WriteCom("1. Schreiben von Objekt B"); // 1. COM-Objekt gibt Schnittstelle wieder frei cout << "Objekt A gibt COM wieder frei\n"; ComA.ReleaseCom(); // 2. COM-Objekt kann jetzt auf Schnittstelle schreiben ComB.WriteCom("2. Schreiben von Objekt B"); ComB.WriteCom("3. Schreiben von Objekt B"); } |