Programmierung

Liebe/-r Experte/-in,

ich wollte fragen ob es möglich ist in c++ eine reaktion auf zeit zu bekommen

sprich wenn ich etwas eingeben soll das nach einer gewissen zeit eine andere aktion gemacht wird

z.b.(sehr einfach)
aufforderung zur eingabe von einer zahl oder einem namen
nach einer gewissen zeit (5-10 sec)
nachfragen ob der benutzer noch da ist oder eingeschlafen
(vlt beenden wenn nach 5min keine weitere reaktion oder sowas in der art)

hoffe das ich mein problem verständlich schildern konnte ^^

Hallo moonlich.

Also generel ist erstmal hat die Frage nichts mit C++ zutun sondern mit APIs des jeweiligen OS :smile: (dies nur nebenbei nicht übel nehmen)
Aber generel JA. Sowohl in Unix als auch bei Windows gibt es für solche Aufgeben beistimmte APIs. Ich kenne mich leider nicht genug in Unix basierten Systemen aus.
Aber bei Win32Apis ist z.B. siehe hier:
http://msdn.microsoft.com/en-us/library/dd458671%28V…
Dann gib es noch die Funktion Sleep jedoch ist diese Funktion wartend. D.h. wenn die aufgerufen wird der aufrufende thread in sleepmodus versetzt und kommt erst nach der angegeben Zeit wieder zurück in Runmodus.

Ach ja nur neben bei als Bemerkung da Win kein ReatTime Os ist, ist die Auflösung des Timers nur ca. 50ms dies ist aber nicht garantiert.

Hoffe die Antwort hilft dir weiter, an sonsten könntest du vielleicht dein konkretes Problem beschreiben und ich schau mal wie eine mögliche Lösung aussehen kann.

Gruß

Andreas

vielleicht dein konkretes Problem beschreiben und ich schau
mal wie eine mögliche Lösung aussehen kann.

Gruß

Andreas

mein konkretes problem ist vlt komplizierter als es eigentlihc ist (und rein selbst interesiert)

ich will ien programm (spiel oder anderes) schreiben welches nciht rundenbasierte kämpfe (das einfach schon gemacht) sondern echtzeitkämpfe macht das heist nach einer gewissen zeit soll der gegner eine aktion machen und wenn meine zeit drann ist soll ich das machen (zeit soll variabel im programm einstellbar sein)

ich hab das erst so geschrieben da ich nicht wusste ob ich hier sowas wie spielefragen überhaupt stellen darf ^^"

hoffe das erklärt das besser
(achja und auf unix system(linux))

Ja ob es um das Problem bei einem Spiel handelt oder um eine kaufmännische Applikation spielt ja keine Rolle denke ich.
So wie ich dich verstanden habe willst du sowas wie Timeshifting machen. Also jeder Spieler bekommt ein gewisses Zeitfenster um seine Aktionen auszuführen.
Da würde ich auf Anhieb auch so vorgehen, dass ich ein Timer (denn es bei Unix 100% gibt) starten, der mir nach einer bestimmten Zeit eine Callbackfunktion aufruft (diese wechelt die Spieler z.B.). Wie die Funktionen hiessen und wie dies aufgerufen werden bin ich überfragt, da wie ich schon erwähnt habe Windows lasstig bin. Aber Goooooogle ist bestimmt eine Hilfe :smile:

Gruß
Andreas

So wie ich dich verstanden habe willst du sowas wie
Timeshifting machen. Also jeder Spieler bekommt ein gewisses
Zeitfenster um seine Aktionen auszuführen.
Da würde ich auf Anhieb auch so vorgehen, dass ich ein Timer
(denn es bei Unix 100% gibt) starten, der mir nach einer
bestimmten Zeit eine Callbackfunktion aufruft (diese wechelt
die Spieler z.B.).

mir ist grade ein besseres beispiel eingefallen vlt kannst du damit mehr anfangen

final fantasy (sry für die schleichwerbung) das kennt bestimmt jeder ^^

da is das auch so du hast einen aktions balken (muss nicht sein aber zur veranschaulichung meines problems hilfreich) wenn der voll ist kannst du eine aktion ausführen aber während du auswählst füllen sich die balken der anderen weiter (und der gegner führt aktion aus wenn seiner voll ist) du kannst währenddessen aber immer noch auswählen (also kein abbruch)

das ist vlt ein besseres beispiel
ich will nur das thema an sich (keine grafik da ich eh auf der textkonsole programmieren will [grafik währe extra für mich aber das kann ich mir selbst überlegen falls das geht^^])

lösung
ich hab es rausgefunden mit einigen umwegen aber es hat funktioniert (probiers noch aus aber in der theorie müsste es klappen)
auf dieser seite wird es (in englisch leider) ziemlich gut erklärt sogar mit einem beispiel

http://www.mobydisk.com/softdev/techinfo/pthreads_tu…

und zwar mit threads für paralelle prozess arbeit
(mit getchar() oder getkey() kann man dann sogar was eingeben)

ich hätt meinen andern text ja editiert aber anscheinend geht das hier nicht

trotzdem danke für die hilfe

Dort werden die threads beschrieben, jedoch so weit ich gesehen habe keine timer gestartet.
Nur als Tipp, eine multithreading Anwendung benötigt umbedingt synchronisationsobjekte umd gleichzeitigen zugriff auf eine und die selbe variablen oder resourcen zu vermeiden. Sie hier zu mutex, semaphoren usw.
Soweit ich weiss werden jedoch spiele, besonders die eine grophische oberfläche besitzen meist in einer hauptschleife geschrieben. Dies hilft die wiederholrate der anzeige zu aktualisieren. Natürlich hängt die vorgehensweise sehr stark von der jeweiligen anwendung ab.

Gruß
Andreas

also so wie ich das woltle hab ichs jetz (über mehr als 10 ecken