Aktuelle Zeit: 22.12.2024, 19:41

Alle Zeiten sind UTC + 1 Stunde




Ein neues Thema erstellen Auf das Thema antworten  [ 5 Beiträge ] 
Autor Nachricht
 Betreff des Beitrags: Threads innerhalb von klassen
BeitragVerfasst: 20.03.2008, 19:45 
Offline

Registriert: 16.05.2007, 21:00
Beiträge: 166
Hi,
Ich möchte für mein Spiel gerne eine kleine Netzwerkengine schreiben. Ich möchte gerne Threads innerhalb der Klasse benutzenm in dem Stil.
Code:
class network {
public:
network(//blabla);
~network();
void senden(//blabla);
void empfangen(/blabla);
// etc.
private:
void senden_help(void* arg);
void empfangen_help(void* arg);
void network_help(void* arg);
struct data {
int eins,zwei,drei;
};
};

Ich würde den public teil dazu nutzen um die user Parameter in ein struct zu speichern und dann dort die threads mit der jeweiligen funktion im private Berreich starten.
Jedoch habe ich herrausgefunden das die threads C++ nicht können sondern nur C und ich somit nicht innerhalb der Klasse funktionen aufrufen kann. Weiß jemand wie ich das Problem lösen kann?

MFG ReduX


Nach oben
 Profil  
 
 Betreff des Beitrags: Re: Threads innerhalb von klassen
BeitragVerfasst: 20.03.2008, 21:44 
Offline
Moderator
Benutzeravatar

Registriert: 15.04.2007, 20:20
Beiträge: 505
Wohnort: Reelsen
ich benutze für die Threads pthreads, die Methode dürfte jedoch überall anwendbar sein:

Wenn ein Thread erstellt wird, wird eine C-Funktion aufgerufen, diese bekommt von pthreads einen von mir definierten Parameter mitgegeben:
Code:
pthread_create(&serverthread, this, start_server_thread, 0);
// This zeigt auf die benutzte Klasse und wird dem Thread übergeben.


Die Threadfunktion sieht dann so aus:
Code:
void *start_server_thread(void *thisptr)
{
   ((GameEngine*)thisptr)->serverThread();
   return 0;
}

(Der übergebene Pointer wird gecastet und darüber die Memberfunktion des Threads aufgerufen)

Natürlich geht das nur mit public-Funktionen, für "richtige" C++-Threads könntest du dir vllt glibmm anschauen, die unterstützt das afair.


EDIT:
Übrigends, trotz aller Multicore-Optimierung, übertreibs nicht mit den Threads, mehr als 3 - 4 gleichzeitig sind nicht nur unnützt sondern machen das Programm auch unnötig komplizierter (Thread Safety).

_________________
Meine Gameengine :)
Bild


Nach oben
 Profil  
 
 Betreff des Beitrags: Re: Threads innerhalb von klassen
BeitragVerfasst: 20.03.2008, 22:03 
Offline

Registriert: 16.05.2007, 21:00
Beiträge: 166
Hi,
Danke für deine Antwort.
Mit den Threads übertreiben tue ich nicht ich möchte nur das wenn der User:
Code:
server test(//blablabla);

Das dann der Server im hintergrund läuft und er dann mittels server.senden etc. Sachen senden kann.

Nur so ganz verstanden habe ich deinen Code noch nicht.
Ich habe ja jetzt eine Funktion und möchte von einer Public eine private funktion der gleichen Klasse aufrufen und keine globalen funktionen wie sieht es da dann aus?

MFG ReduX


Nach oben
 Profil  
 
 Betreff des Beitrags: Re: Threads innerhalb von klassen
BeitragVerfasst: 20.03.2008, 22:20 
Offline
Moderator
Benutzeravatar

Registriert: 15.04.2007, 20:20
Beiträge: 505
Wohnort: Reelsen
Zitat:
Ich habe ja jetzt eine Funktion und möchte von einer Public eine private funktion der gleichen Klasse aufrufen und keine globalen funktionen wie sieht es da dann aus?

Geht so einfach nicht, musst du umleiten.

_________________
Meine Gameengine :)
Bild


Nach oben
 Profil  
 
 Betreff des Beitrags: Re: Threads innerhalb von klassen
BeitragVerfasst: 21.03.2008, 01:12 
Offline

Registriert: 16.05.2007, 21:00
Beiträge: 166
Hi,
Kannst du mir das genauer erklären?


Nach oben
 Profil  
 
Beiträge der letzten Zeit anzeigen:  Sortiere nach  
Ein neues Thema erstellen Auf das Thema antworten  [ 5 Beiträge ] 

Alle Zeiten sind UTC + 1 Stunde


Wer ist online?

Mitglieder in diesem Forum: 0 Mitglieder und 7 Gäste


Du darfst keine neuen Themen in diesem Forum erstellen.
Du darfst keine Antworten zu Themen in diesem Forum erstellen.
Du darfst deine Beiträge in diesem Forum nicht ändern.
Du darfst deine Beiträge in diesem Forum nicht löschen.
Du darfst keine Dateianhänge in diesem Forum erstellen.

Suche nach:
Gehe zu:  
Powered by phpBB® Forum Software © phpBB Group
Deutsche Übersetzung durch phpBB.de