Herzlich Willkommen, lieber Gast!
  Sie befinden sich hier:

  Forum » C / C++ (ANSI-Standard) » Zeiger auf aufrufende Klasse?

Forum | Hilfe | Team | Links | Impressum | > Suche < | Mitglieder | Registrieren | Einloggen
  Quicklinks: MSDN-Online || STL || clib Reference Grundlagen || Literatur || E-Books || Zubehör || > F.A.Q. < || Downloads   

Autor Thread - Seiten: > 1 <
000
16.01.2008, 12:02 Uhr
~BAWNHO
Gast


Hallo..

in einem Framework habe ich eine Methode Thread. Alles, was der User später implementiert, ist von Thread abgeleitet. Außerdem habe ich eine Klasse Mutex, die der User benuten kann. In dieser Klasse müsste ich nun feststellen, welcher Thread den Mutex benutzt - also wer die Methoden aufgerufen hat.

Geht das irgendwie mit this?

Und wenn ja, wie kann man das passend scopen, damit nicht gleichnamige Methoden aus der Mutex-Klasse benutzt werden? :o
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
001
16.01.2008, 12:15 Uhr
ao

(Operator)


Ich versteh die Frage nicht ganz. Wer muss das feststellen, und wozu?

Das Prinzip vom Mutex ist doch so: Der Mutex regelt den Zugriff auf irgendeine Resource. Wenn die Resource von einem Thread belegt ist, müssen alle anderen warten, bis sie dran können, das ist alles.

Welcher Thread die Resource belegt hat, das spielt für niemanden eine Rolle, darum gibt es in der Regel keinen Weg, das abzufragen.

Oder schreibst du gerade die Mutex-Klasse?
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
002
16.01.2008, 12:19 Uhr
~BAWNHO
Gast


Ja, genau. Ich schreibe die gerade. Was sie macht ist eigentlich auch nicht so wichtig.

Es ist nur so: Ein Thread will eine Mutex-Klasse benutzen (instanziieren und Methoden aufrufen).

Die Mutex-Klasse nun ist mein Problem: Sie muss wissen, wer sie aufgerufen hat. Methoden-Argumente scheiden als Möglichkeit aus. Kann sie es trotzdem irgendwie herausfinden?
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
003
16.01.2008, 13:40 Uhr
ao

(Operator)


Ja, sie kann beim Betriebssystem anfragen, welcher Thread gerade läuft. Ist natürlich plattformspezifisch. In Windows: GetCurrentThreadId http://msdn2.microsoft.com/en-us/library/ms683183(VS.85).aspx
Dieser Post wurde am 16.01.2008 um 13:41 Uhr von ao editiert.
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
004
16.01.2008, 18:42 Uhr
stephanw
localhorst


Beim Betriebssystem nachzufragen mag vielleicht möglich sein. Allerdings müsste man dann auch noch eine Zuordnung zwischen den Thread-Ids und den Thread-Objekten herstellen (falls Du das Objekt benötigst, wie ich annehme).

Warum scheiden Parameter aus ? Warum gibt der aufrufende Thread nicht einfach seinen this-Zeiger an das Mutex-Objekt weiter ?

Warum muss Mutex überhaupt wissen, welcher Thread seine Methoden verwendet ? Warum soll nur ein Thread-Objekt ein Mutex verwenden können ?
--
Reden ist Schweigen und Silber ist Gold.

Dieser Post wurde am 16.01.2008 um 18:43 Uhr von stephanw editiert.
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
005
17.01.2008, 10:47 Uhr
ao

(Operator)



Zitat von stephanw:
Warum muss Mutex überhaupt wissen, welcher Thread seine Methoden verwendet ?

Mutexe sind häufig so implementiert, dass ein Thread, der den Mutex bereits besetzt hat, ihn auch ein weiteres Mal besetzen darf. Mutex heißt gegenseitiger Ausschluss - wenn derselbe Thread den Mutex zweimal belegen will, gibts keinen Grund, ihn beim zweiten Mal auszuschließen. Das kann die Implementierung der Applikation stark vereinfachen.

Um das zu realisieren, braucht man aber in der Tat nur eine eindeutige Identifizierung für den Thread und nicht das Thread-Objekt selber. Aber selbst wenn - das Betriebssystem kann in der Regel auch das Thread-Handle ermitteln. Und darüber sollte man an sein Thread-Objekt herankommen - das sollte man immer in seine Thread-Verwaltung einbauen.

ao
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
Seiten: > 1 <     [ C / C++ (ANSI-Standard) ]  


ThWBoard 2.73 FloSoft-Edition
© by Paul Baecher & Felix Gonschorek (www.thwboard.de)

Anpassungen des Forums
© by Flo-Soft (www.flo-soft.de)

Sie sind Besucher: