![]() |
|
|||||||
| Registrieren | Benutzerliste | Interessengemeinschaften | Suchen | Heutige Beiträge | Alle Foren als gelesen markieren | ||
| Java Link Base | Wiki | NoPaste | Chat | Boardregeln | F.A.Q. |
| C/C++ Hier dreht sich alles um die Programmiersprachen C und C++. |
![]() |
|
|
Themen-Optionen | Thema durchsuchen |
|
|
#1 |
|
Ok, danke! Ich werd schauen, dass ich ohne die OS-Signale auskommen.
Und dann hab ich noch eine Fragen, zu einem wieder anderen Thema! Ich schreibe ein kleines Programm mit 3 Threads und verwende dabei Boost.Thread. Ein Thread ist für die Ausgabe (des Spielfeldes) zuständig, ein Zweiter wartet auf wartet wiederholt auf Eingabe (while-Schleife) und bewegt danach ein Figur. Der dritte Thread jagt (mit ner zweiten Figur) diese Figur, und wenn er sie erwischt, terminiert das Programm. Den Ausgabe-Thread und Jäger-Thread kann ich nun in diesem Falle sauber aus ihren while-Schleifen rauslaufen lassen (und so beenden). Aber was ich mit dem Eingabe-Thread mache, weiß ich nicht Es gibt ja kein thread.cancel() in Boost. Das Problem ist die Eingabe, an der Thread steht und wartet. Wenn ich nur also die Schleifenbedingung auf false setze, wird es ihn wenig beeindrucken...In C und mit pthreads hab ich das mit cancel gelöst, aber hier weiß ich wirklich nicht wie dem beizukommen ist. Kann mir jemand helfen? Ich denke, das Problem wird nicht neu sein....wie wird sowas normalerweise gelöst? |
|
|
|
|
|
|
#2 |
|
Moderator
|
Da es sich hierbei um ein neues Thema handelt war ich mal so frei Deine Frage in ein neues Thema zu verfassen. Dient nur der besseren Übersichtlichkeit und Wiederfindbarkeit
![]() Zu Deiner Frage: Zum Glück hat Boost:Thread keine Möglichkeit einen Thread einfach so "abzuschießen"! In den meisten Fällen wird einfach eine Exception geworfen bzw. irgendein Hardware-Interuppt ausgelöst welcher bewirkt das aus dem aktuell laufenden Thread herausgesprungen wird. Damit man Threads aber regulär beenden kann, sind Flags das Mittel was Du suchst, Pseudo-Code: CPP Code:
Gut Schuß VuuRWerK ![]()
__________________
"C makes it easy to shoot yourself in the foot; C++ makes it harder, but when you do it blows your whole leg off." - Bjarne Stroustrup "make the impossible possible, the possible easy, and the easy elegant." (Moshé Feldenkrais) |
|
|
|
|
|
#3 |
|
Aaah...also könnte ich schreiben:
CPP Code:
Aber das würde nur wegen lazy evaluation funktionieren, oder? Und andersrum ginge es nicht (cin.get() && !isHit)... Und noch eine Frage hätt ich: Weißt du wie man cin entpuffert? Google bringt nur eher diffuse Antworten p.s. Danke für den neuen Thread....ich hab mich gestern nicht getraut einen neuen zu beginnen, da eh schon 7 von 8 ersten Threads von mir sind ![]() |
|
|
|
|
|
|
#4 |
|
Moderator
|
Hm, in C++ muss ich passen da fällt mir gerade keine Möglichkeit ein das stdin(cin) unbuffered zu setzen. In C kenne ich nur die Funktion setbuf(stdin, NULL) bzw. setvbuf(stdin, NULL, _IONBF, 0).
Ansonsten bietet ncurses einem solche Möglichkeiten. Threads kannst Du hier beliebig viele aufmachen das wird keinem vorgezählt Je mehr um so besser für die anderen die die Suche benutzen oder über Google zu uns stoßen.Gut Schuß VuuRWerK ![]()
__________________
"C makes it easy to shoot yourself in the foot; C++ makes it harder, but when you do it blows your whole leg off." - Bjarne Stroustrup "make the impossible possible, the possible easy, and the easy elegant." (Moshé Feldenkrais) |
|
|
|
|
|
#5 |
|
Adminin
|
Wie man das in C++ macht, weiß ich auch nicht, aber in C gibts dafür die Funktion getch() im Header <conio.h>. Musst du halt den Code mischen.
Zur Not, hier mal reinschauen. |
|
|
|
|
|
#6 | |
|
Moderator
|
Zitat:
Gut Schuß VuuRWerK ![]()
__________________
"C makes it easy to shoot yourself in the foot; C++ makes it harder, but when you do it blows your whole leg off." - Bjarne Stroustrup "make the impossible possible, the possible easy, and the easy elegant." (Moshé Feldenkrais) |
|
|
|
|
|
|
#7 | |
|
Adminin
|
Zitat:
). |
|
|
|
|
|
|
#8 |
|
Moderator
|
Ich unterstelle es ihm da er bisher immer für Unix entwickelt hat
![]() Gut Schuß VuuRWerK ![]()
__________________
"C makes it easy to shoot yourself in the foot; C++ makes it harder, but when you do it blows your whole leg off." - Bjarne Stroustrup "make the impossible possible, the possible easy, and the easy elegant." (Moshé Feldenkrais) |
|
|
|
|
|
#10 |
|
Moderator
|
Genau, ncurses hab ich ihm ja auch schon empfohlen aber seither unterhalten wir 2 uns darüber
![]() Sollte ich dennoch mal einen Anflug von Zeit haben schau ich mal wie man es in C++ macht. Ich denke mal das es eventuell durch setzen der ios-flags geht aber ich habe hatte dazu noch nix finden können. Gut Schuß VuuRWerK ![]()
__________________
"C makes it easy to shoot yourself in the foot; C++ makes it harder, but when you do it blows your whole leg off." - Bjarne Stroustrup "make the impossible possible, the possible easy, and the easy elegant." (Moshé Feldenkrais) |
|
|
|
![]() |
| Lesezeichen |
| Stichworte |
| - |
| Aktive Benutzer in diesem Thema: 1 (Registrierte Benutzer: 0, Gäste: 1) | |
| Themen-Optionen | Thema durchsuchen |
|
|
Ähnliche Themen
|
||||
| Thema | Autor | Forum | Antworten | Letzter Beitrag |
| #include <boost/foo.hpp> | Evgeni | C/C++ | 11 | 18.02.2010 15:25 |
| Der Bug-Thread | L-ectron-X | Kritiken & Anregungen | 94 | 17.02.2010 06:15 |
| Der Lösch-Thread | pcworld | Wiki | 4 | 27.11.2008 11:20 |
| AWT dispatch thread | Peter | DockingFrames | 3 | 05.08.2008 13:02 |
| Thread(s)? | Vril | Java Standard Edition (J2SE) | 9 | 11.10.2006 21:10 |