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

CBenni::O

1x Contest-Sieger

  • »CBenni::O« ist der Autor dieses Themas

Beiträge: 1 145

Wohnort: Stuttgart

  • Private Nachricht senden

1

22.02.2010, 22:32

Klasse mit Thread->Memberfunktion

Hallo,

Ich möchte eine Klasse erstellen, welche eine Thread-HANDLE besitzt, welcher auf eine Memberfunktion zeigt.

Bsp:

C-/C++-Quelltext

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
class foo
{
public:
      DWORD WINAPI barThread(LPVOID lpParam)
      {
             //...

      }

      HANDLE MyThread;
      DWORD dwId;
      void startThread()
      {
              MyThread = CreateThread(NULL,0,
                                      &foo::barThread, // geht nicht, da barThread nicht statisch ist!

                                      NULL,NULL,&dwId);
      }
}


Wie aus den Kommentaren ersichtlich, klappt das so nicht, da man keine Funktionspointer auf nicht-statische Memberfunktionen erstellen kann.

EDIT: barThread kann nicht statisch gemacht werden!

Die Lösungen per Google zielen alle drauf ab, dass man einen Wrapper schreibt. Da ich aber die Möglichkeit bieten will, mehrere Klassen (foo) zu erstellen, klappt das nicht (so einfach)

Wie löst man dieses Problem?

Danke schon mal im Voraus ;)

mfg CBenni::O
Ein Mitglied der VEGeiCoUndGraSonMaWiGeS Bewegung.
42!
Aufräumen kann jeder, nur das Genie überblickt das Chaos!
Metal will never die!
1. Sppro Gamecontest - mein Beitrag

drakon

Supermoderator

Beiträge: 6 513

Wohnort: Schweiz

Beruf: Entrepreneur

  • Private Nachricht senden

2

22.02.2010, 22:52

Um eine Art Wrapper kommst du nicht herum.

Was du machen kannst ist eine statische Funktion anzugeben und dann einfach einen Zeiger auf das Objekt irgendwie sonst mitgeben. Und genau für das ist der lpParameter bei der Funktion.

Da kannst du dann aber auch gleich boost::function nehmen. Und wenn wir schon dabei sind, würde ich dir auch gleich zu boost::thread raten. ;)

3

22.02.2010, 23:20

CBenni::O, du arbeitest doch mit SFML. Hast du schon einen Blick auf die Klasse sf::Thread geworfen?

4

22.02.2010, 23:40

Also viel einfacher und komfortabler als mit boost::thread geht es kaum mehr:

C-/C++-Quelltext

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
class foo
{
public:
      void barThread()
      {
             //...

      }

      boost::thread MyThread;

      void startThread()
      {
              MyThread = boost::thread(&foo::barThread, this);
      }
}


Und boost sollte doch sowieso schon installiert sein ;)
Tutorials zu OpenGL, Ubuntu und Programmieren allgemein: www.tomprogs.at

Forum und Wiki zum Programmieren lernen: proggen.org/forum.proggen.org

5

22.02.2010, 23:49

Zitat von »"_Tom_"«

Also viel einfacher und komfortabler als mit boost::thread geht es kaum mehr
sf::Thread ist ähnlich einfach. CBenni::O kann sich die beiden ja mal anschauen... ;)

CBenni::O

1x Contest-Sieger

  • »CBenni::O« ist der Autor dieses Themas

Beiträge: 1 145

Wohnort: Stuttgart

  • Private Nachricht senden

6

23.02.2010, 16:31

Und das funktioniert auch mit WaitForSingleObject? oder muss man das selber implementieren?

Danke für eure antworten .)

mfg CBenni::O
Ein Mitglied der VEGeiCoUndGraSonMaWiGeS Bewegung.
42!
Aufräumen kann jeder, nur das Genie überblickt das Chaos!
Metal will never die!
1. Sppro Gamecontest - mein Beitrag

the[V]oid

Alter Hase

Beiträge: 775

Wohnort: Aachen

  • Private Nachricht senden

7

23.02.2010, 16:38

Alle Thread-Implementierungen bieten unterschiedliche Realisierungen von Synchronisierung.
Aber vom Prinzip her ist es immer dasselbe.
<< an dieser Stelle ist eine Signatur verstorben >>

CBenni::O

1x Contest-Sieger

  • »CBenni::O« ist der Autor dieses Themas

Beiträge: 1 145

Wohnort: Stuttgart

  • Private Nachricht senden

8

23.02.2010, 16:50

Zitat von »"the[V«

oid"]Alle Thread-Implementierungen bieten unterschiedliche Realisierungen von Synchronisierung.
Aber vom Prinzip her ist es immer dasselbe.


Und wie ist das speziell für sf::Thread? sf::Mutex?

Kennt jemand einen Link?

Danke ;)

mfg CBenni::O
Ein Mitglied der VEGeiCoUndGraSonMaWiGeS Bewegung.
42!
Aufräumen kann jeder, nur das Genie überblickt das Chaos!
Metal will never die!
1. Sppro Gamecontest - mein Beitrag

9

23.02.2010, 17:37

Zitat von »"CBenni::O"«

Kennt jemand einen Link?

Ja :p
http://www.lmgtfy.com/?q=sf%3A%3AThread+sf%3A%3AMutex
Tutorials zu OpenGL, Ubuntu und Programmieren allgemein: www.tomprogs.at

Forum und Wiki zum Programmieren lernen: proggen.org/forum.proggen.org

CBenni::O

1x Contest-Sieger

  • »CBenni::O« ist der Autor dieses Themas

Beiträge: 1 145

Wohnort: Stuttgart

  • Private Nachricht senden

10

23.02.2010, 17:40

Google habe ich auch konsultiert.

Aber auch für sf::Thread braucht man eine function-pointer, da kann ich auch gleich die Standard-Funktionen benutzen :roll:

mfg CBenni::O
Ein Mitglied der VEGeiCoUndGraSonMaWiGeS Bewegung.
42!
Aufräumen kann jeder, nur das Genie überblickt das Chaos!
Metal will never die!
1. Sppro Gamecontest - mein Beitrag

Werbeanzeige