PDA

Archiv verlassen und diese Seite im Standarddesign anzeigen : C++ und Threads



pruegelkloete
25-11-2002, 11:00
Hallo Leute,

ich habe da ein Problem mit Pthreads. Ich habe hier im Forum auch schon einges gefunden aber nicht was bezüglich C++ passt.

Also hier mal eine kleine Erklärung zu meinem Problem. Ich wollte in C++ ein Programm schreiben, welches über curses zeichen von der TAstatur einliest.

Unbedarfter Weise habe ich dafür nene extra thread angedacht. Dieser sollte in einer schleife die Tastatur überwachen und wenn es dann eine TAstatureingabe gab, das der jeweilig aktiven klasse durch aufruf einer methode mitteilen. Die klassen, um die es dabei geht, sind abgeleitet von einer Basisklasse, welche fuer dieses Event-Handling die methode handleEvent() implementieren muessen. Darin soll so ne art state-engine haengen, die dann entscheidet, was fuer dieses event gemacht werden soll.

Ich habe das ganze mit pthreads mal versucht, dies sind aber threads in c und mein programm crashte, wenn ich aus dem Eventthread die handleevent-methode aufrufen will. Die klasse wird uebrigens inb main() mit new angelegt.

Also es klappt nicht. Ich habe mir am We dann mal ein Buechliein gekauft und dort gelesen, das ein zugriff nur auf modulglobale c-Variablene moeglich ist. Fuer mich und mein C++ programm wuerde das aber bedeuten, dass ich so richtig global variablen oder strukturen definieren muss, die dann aus den verschiedenen threads geschrieben und gelesen werden, um die events zu handlen.

Mein frage an dieser Stelle: Muss das sein?? oder kann man das auch anders loesen.

Ich habe leider noch keine Bespiel gefunden, ind dem sich zwei Threads ueber festgelegte schnittstellen unterhalten, aber genau das wollte ich erreichen.

Kennt vielleicht jemand von euch eine C++-alternative zu pthreads ???


Ich danke euch im voraus...

Gruss

anda_skoa
25-11-2002, 16:13
Original geschrieben von pruegelkloete
Unbedarfter Weise habe ich dafür nene extra thread angedacht. Dieser sollte in einer schleife die Tastatur überwachen und wenn es dann eine TAstatureingabe gab, das der jeweilig aktiven klasse durch aufruf einer methode mitteilen.


Wie erkennst du das "aktive" Objekt?



Also es klappt nicht. Ich habe mir am We dann mal ein Buechliein gekauft und dort gelesen, das ein zugriff nur auf modulglobale c-Variablene moeglich ist. Fuer mich und mein C++ programm wuerde das aber bedeuten, dass ich so richtig global variablen oder strukturen definieren muss, die dann aus den verschiedenen threads geschrieben und gelesen werden, um die events zu handlen.

Mein frage an dieser Stelle: Muss das sein?? oder kann man das auch anders loesen.


Ansich kein Problem.
Du brauchst nur eine globale Klasse, die deine Eventhandler Klassen kennt.
Aber ich frage mich, ob ncurses nicht sowieso eine Eventloop hat.
Bzw eine Eventqueue vielleicht.



Kennt vielleicht jemand von euch eine C++-alternative zu pthreads ???


Es gibt einige C++ libs mit Threads.
Qt (www.trolltech.com) , ACE (http://www.cs.wustl.edu/~schmidt/ACE-overview.html), BOOST (www.boost.org)

Ciao,
_

pruegelkloete
26-11-2002, 09:35
Hallo und danke fuer die Anregungen....

Den "aktiven Controller speichert eine Klasse namens Controllerhandler als Pointer. Dieser wird dann dem EventHAndler übergeben.

Ich habe gestern noch ein bisschen rumprobiert und mal ne globale Variable fuer den Austausch zwischen den Threads benutzt.

Es hat bei mir auch nichts gebracht, alle involvierten Klassen global zu deklarieren, dass hat nicht geklappt, wenn aus dem Eventthread eine methode aus einer anderen Klasse (COntroller) aufgerufen wurde. Ich denke dass liegt an den Namensraeumen, oder liege ich da falsch.

Naja ich habe mich gestern nacht dann allerdings noch einmal im internet umgeschaut und dort die QpThread- lib gefunden. DIe ist mit 17 Sieten verhältnismäßig gut dokumentiert und stellt threads auf C++ basis zur Verfügung. Da ahbe ich auch was von signalHandlern gelesen. Ich werde mich heute abend mal ransetzen- vielleicht klappt es ja...

Achja noch zum Hintergrund und zu curses. Jetzt am Anfang sdind meine Events nur tasten von curses, aber da soll noch einiges dazukommen, was nicht auf curses basiert (Fernbedienung etc.), deshalb der Eventthread.

Ich stehe ja erst am Anfang.

Danke & Gruss