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
Ja ich benutze SFML 1.6 und ich versuche schon seit 2 Monaten eine Lösung zu finden. Was wäre deiner Meinung nach die beste Lösung? Boost? Ich wäre sehr gerne Plattform unabhängig.
Mit andere Syntax mein ich die mit: sf::Thread Thread(void(Game::OnEvent)(),Game *theGame); Würde die überhaupt etwas bewirken?
C-/C++-Quelltext |
|
1 |
sf::Thread EventThread(&WrapperEvent,&game); |
C-/C++-Quelltext |
|
1 2 3 4 5 |
void WrapperEvent(void* UserData) { Game* game = static_cast<Game*>(UserData); game->OnEvent(); } |
Dieser Beitrag wurde bereits 2 mal editiert, zuletzt von »Nexxtron« (10.03.2012, 02:41)
Community-Fossil
du meinst mit void Run(){}. Da kann ich aber dann nur einen Thread starten.Du könntest auch einfach von sf::Thread erben und die runmethode definieren. Hättest du dir die Tutorials auf der SFML Seite angeschaut, hättest du das Problem nach 10 Minuten gelöst
Dafür gibt es ja dann die Mutexes oder habe ich da etwas falsch verstanden?Threads müssen synchronisiert werden. Wenn dein Zeichnenthread gerade ein Objekt zeichnen will, dass der Eventthread gerade löscht kommen gemeine Fehler zustande.
Könntest du mir bitte genauer erklären was du damit meinst?Schon die Namen deiner Threads zeugen davon, dass du nicht weißt was du tust.
Wofür benötigst du die Nebenläufigkeit eigentlich? Läuft dein Spiel so langsam?
Ich habe inzwischen gelesen, dass ich das Programm mal nicht im Debug Modus ausprobieren soll. Meistens wird auch das Bild nicht gerendert, also das Spiel stürzt einfach ab. Egal ob Release oder Debug. Ich glaube das liegt an meinem Laptop, der hat ziemliche Überhitzungsprobleme und dann noch eine Virtuelle Maschine(Ich programmiere in einer VM damit ich wenn irgendetwas nicht richtig funktioniert nicht wieder mein Hauptsystem neu aufsetzen muss(z.B. eine Bibliothek wird nicht richtig installiert etc.)) Wenn ich den Projektordner aus der VM auf meinen echten PC kopiere dann kann ich das Programm nicht starten. Es passiert einfach nichts. Auch sf:leep(1) habe ich schon im Programm.Zitat
Als ich dann eine Klasse für Buttons geschrieben habe und das ganze mal
zum Debuggen gestartet habe, habe ich festgestellt, dass das
Event-Handling nicht lückenlos funktioniert. Damit meine ich, dass es
teilweise ein ziemliches Delay gab. (Ich habe auch sf::Input probiert,
ohne erfolg) Deshalb die Entscheidung zum Multithreading.
...
Selbst wenn ich mir die Threads sparen könnte möchte ich zumindest wissen warum es nicht funktioniert, denn früher oder später werde ich mal Threads brauchen.
Werde ich mir auf jeden Fall anschauen. Vielen Dank.Ich schau mir grad eine Vorlesungsreihe vom MIT zu dem Thema an: http://ocw.mit.edu/courses/electrical-en…otes-and-video/
Community-Fossil
Dafür gibt es ja dann die Mutexes oder habe ich da etwas falsch verstanden?
Ich wusste nicht, dass SFML 1.6 das nicht kann. Ich werde auf Version 2.0 umsteigen.du meinst mit void Run(){}. Da kann ich aber dann nur einen Thread starten.Du könntest auch einfach von sf::Thread erben und die runmethode definieren. Hättest du dir die Tutorials auf der SFML Seite angeschaut, hättest du das Problem nach 10 Minuten gelöst
Wofür benötigst du die Nebenläufigkeit eigentlich? Läuft dein Spiel so langsam?Ich habe inzwischen gelesen, dass ich das Programm mal nicht im Debug Modus ausprobieren soll. Meistens wird auch das Bild nicht gerendert, also das Spiel stürzt einfach ab. Egal ob Release oder Debug. Ich glaube das liegt an meinem Laptop, der hat ziemliche Überhitzungsprobleme und dann noch eine Virtuelle Maschine(Ich programmiere in einer VM damit ich wenn irgendetwas nicht richtig funktioniert nicht wieder mein Hauptsystem neu aufsetzen muss(z.B. eine Bibliothek wird nicht richtig installiert etc.)) Wenn ich den Projektordner aus der VM auf meinen echten PC kopiere dann kann ich das Programm nicht starten. Es passiert einfach nichts. Auch sf:leep(1) habe ich schon im Programm.Zitat
Als ich dann eine Klasse für Buttons geschrieben habe und das ganze mal
zum Debuggen gestartet habe, habe ich festgestellt, dass das
Event-Handling nicht lückenlos funktioniert. Damit meine ich, dass es
teilweise ein ziemliches Delay gab. (Ich habe auch sf::Input probiert,
ohne erfolg) Deshalb die Entscheidung zum Multithreading.
...
Selbst wenn ich mir die Threads sparen könnte möchte ich zumindest wissen warum es nicht funktioniert, denn früher oder später werde ich mal Threads brauchen.
Wie könnte ein solches Interface aufgebaut sein?Zitat
D.h. sie sollten einander nur über ein einziges Interface beeinflussen können um das Synchronisierne zu vereinfachen.
Community-Fossil
Wie könnte ein solches Interface aufgebaut sein?Zitat
D.h. sie sollten einander nur über ein einziges Interface beeinflussen können um das Synchronisierne zu vereinfachen.
Es gibt keine Dlls bei Ubuntu (ich glaub da braucht man die Headerdateien/Sourcedateien selbst)Du müsstest höchstens die dlls in den Ordner verschieben.
Kompiliere die SFML ausserhalb der VM einfach neu. Musst du ja sowieso mit SFML2.0.
Community-Fossil
Werbeanzeige