Du bist nicht angemeldet.

Stilllegung des Forums
Das Forum wurde am 05.06.2023 nach über 20 Jahren stillgelegt (weitere Informationen und ein kleiner Rückblick).
Registrierungen, Anmeldungen und Postings sind nicht mehr möglich. Öffentliche Inhalte sind weiterhin zugänglich.
Das Team von spieleprogrammierer.de bedankt sich bei der Community für die vielen schönen Jahre.
Wenn du eine deutschsprachige Spieleentwickler-Community suchst, schau doch mal im Discord und auf ZFX vorbei!

Werbeanzeige

dot

Supermoderator

Beiträge: 9 757

Wohnort: Graz

  • Private Nachricht senden

21

08.01.2008, 15:36

Zitat von »"$nooc"«

ich muss allerdings anmerken dass mir das gar nicht gefällt.. wieso kann man den code nicht in eine cpp datei auslagern? das ist ja total nervig..


weil der compiler dann die definition des templates nicht finden kann, die er aber benötigt um das template zu instanzieren...

David Scherfgen

Administrator

Beiträge: 10 382

Wohnort: Hildesheim

Beruf: Wissenschaftlicher Mitarbeiter

  • Private Nachricht senden

22

08.01.2008, 15:40

Zitat von »"$nooc"«

ich habe vor meine klasse "CriticalSections" von "List" erben zu lassen, damit CriticalSections "sich selbst" verwaltet..

ist das ne gute lösung?

Nein, das ist totaler Unfug.
Vererbung verwendet man für "ist-ein"-Beziehungen.
Das würde heißen: "eine Critical Section ist eine Liste".

$nooc

Alter Hase

  • »$nooc« ist der Autor dieses Themas

Beiträge: 873

Wohnort: Österreich / Kärnten

Beruf: Schüler

  • Private Nachricht senden

23

08.01.2008, 15:43

@ david:

CriticalSections ist auch eine auflistung aller CRITICAL_SECTIONSs .. geht das so klar?

edit:
es gibt ja mehrere critical sections von denen man unterscheidet.. und um das zu verwalten, hab ich mir das zeug geschrieben..

das soll dann irgendwann so funktionieren

C-/C++-Quelltext

1
2
3
4
5
CritS.EnterCritSection(ID_WRITING);

std::cout << "blaaaaah" << std::endl;

CritS.LeaveCritSection(ID_WRITING);


@ dot:

jaja, das is schon klar ^^
ich mein ja nur.. theoretisch könnts ja wohl möglich sein dass es so funktioniert wir ne klasse.. da gehts ja auch dass ich den code in einer cpp auslagere..
Am Anfang der Weisheit steht die eigene Erkenntnis, dass man selbst nichts weiß! - Sokrates

dot

Supermoderator

Beiträge: 9 757

Wohnort: Graz

  • Private Nachricht senden

24

08.01.2008, 15:46

Zitat von »"$nooc"«

CriticalSections ist auch eine auflistung aller CRITICAL_SECTIONSs .. geht das so klar?


ich kann nicht ganz nachvollziehen was du damit vorhast!?

$nooc

Alter Hase

  • »$nooc« ist der Autor dieses Themas

Beiträge: 873

Wohnort: Österreich / Kärnten

Beruf: Schüler

  • Private Nachricht senden

25

08.01.2008, 15:47

siehe oben.. habs editiert..
Am Anfang der Weisheit steht die eigene Erkenntnis, dass man selbst nichts weiß! - Sokrates

dot

Supermoderator

Beiträge: 9 757

Wohnort: Graz

  • Private Nachricht senden

26

08.01.2008, 15:52

hm, ok, das kann man machen. ob das sinnvoll is frag ich mich aber.

bei mir sieht das normalerweise so aus:


C-/C++-Quelltext

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
// threading.h


namespace Threading
{

  class CriticalSection
  {
  private:
    CRITICAL_SECTION s;
    CriticalSection(const CriticalSection&);
    CriticalSection& operator =(const CriticalSection&);
  public:
    CriticalSection() { InitializeCriticalSection(&s); }
    ~CriticalSection() { DeleteCriticalSection(&s); }

    void lock() { EnterCriticalSection(&s); }
    void unlock() { LeaveCriticalSection(&s); }
  };

  template<class T = CriticalSection>
  class scoped_lock
  {
  private:
    T& _t;
    scoped_lock(const scoped_lock&);
    scoped_lock& operator =(const scoped_lock&);
  public:
    scoped_lock(T& t) : _t(t) { _t.lock(); }
    ~scoped_lock() { _t.unlock(); }
  };

}


// whatever.cpp


// ...


Threading::CriticalSection write_mutex;

// ...


{
  Threading::scoped_lock<> l(write_mutex);
  std::cout << "blaaaaah" << std::endl;
}

$nooc

Alter Hase

  • »$nooc« ist der Autor dieses Themas

Beiträge: 873

Wohnort: Österreich / Kärnten

Beruf: Schüler

  • Private Nachricht senden

27

08.01.2008, 15:58

wtf.. is ja viel genialer als mein ansatz..
:(

das template scoped_lock ersetzt im prinzip meine komplette List-klasse ^^

ich muss jetz im ernst fragen: bin ich blöd?
Am Anfang der Weisheit steht die eigene Erkenntnis, dass man selbst nichts weiß! - Sokrates

dot

Supermoderator

Beiträge: 9 757

Wohnort: Graz

  • Private Nachricht senden

28

08.01.2008, 16:03

Zitat von »"$nooc"«

ich muss jetz im ernst fragen: bin ich blöd?


ne musst du nicht. da steckt schon etwas erfahrung dahinter. das mit dem scoped_lock is eine übliche technik. der vorteil davon is, dass sie exception safe is. auch wenn irgendwo in der cs eine exception geworfen wird, wird die critical section in jedem fall wieder verlassen. außerdem brauchst du so nicht vor jedem möglichen return etc. ein LeaveCriticalSection() usw.

$nooc

Alter Hase

  • »$nooc« ist der Autor dieses Themas

Beiträge: 873

Wohnort: Österreich / Kärnten

Beruf: Schüler

  • Private Nachricht senden

29

08.01.2008, 16:16

also ich muss zugeben, ich musste kurz "kichern", da mich die einfachheit der technik umgehaun hat und ich kurz über meinen "umweg" nachdenken musste ^^

einfach aber total effektiv!
ich hab jetzt ein bischen zu viel arbeit investestiert, als dass ich die List klasse wegwerfen wollte, aber auf jeden fall werde ich mich bemühen solche scope_locks zu verwenden wenn diese nützlich sind :)

ganz so schlimm ist meine lösung mit der vererbung ja nicht oder? ^^

ich seh grad du kommst aus Graz :)
me = klagenfurter :D
Am Anfang der Weisheit steht die eigene Erkenntnis, dass man selbst nichts weiß! - Sokrates

Werbeanzeige