Gleichzeitigkeit
-
Wirklich nebeneinander arbeiten können nur Multiprozessorkisten, da der CPU immer nur einen Takt nqach dem nächsten macht, und nicht 4 gleichzeitig.
-
Was meinst du mit gleichzeitig ? Ich sehe nicht wo bei kbhit() irgendwas gleichzeitig läuft.
Du kannst auf jeden Fall zwei Programme unter Windows gleichzeitig laufen lassen.
-
bei kbhit() läuft serwohl etwas "gleichzeitig": kbhit() wartet auf einen Tasten-
druck, auch wenn "gleichzeitig" irgendwas anderes läuft, schleifen oder eben
sonstwas. Mir läuchtet jetzt aber schon ein, dass da ne schleife dahinter sein
muss, oooder ein aufgesetztes Prgramm (wovon ich keine Ahnung habe!??)
Nur wieso baut man dann keine Multiprozessoren fürs "Volk", das wäre dann doch
noch viel effektiver oder nicht?
Aber wie ist das mit Spielen, da laufen doch auch sehr sehr viele Dinge wirklich
gleichzeitig ab: wie funktioniert das?---Darauf wollte ich eigentlich hinaus.
Ich kann mir nicht vorstellen dass man das alles mit schleifen konstruiren kann
oder z.B für jeden charakter ein eigenes programm laufen zu lassen.
Vielleicht kann mir, dass mal jemand ansatzweise erklären?!
-
Steht doch schon weiter oben: Das geht mit THREADS.
"Wieso baut man keine Multiprozessoren fürs Volk?"
Vielleicht weil's schweineteuer wäre und für normale Anwendungen viel zu überdimensioniert???Im Grunde sind doch schon die heutigen Prozessoren unterbeschäftigt: Die meiste Zeit hat der Prozessor nix zu tun, sondern wartet nur darauf, dass er mal wieder was zu arbeiten kriegt... Wenn man da jetzt noch 'nen zweiten Prozessor reinbauen würde, wär's die reinste Verschwendung...
-
kbhit läuft überhaupt nicht gleichzeitig. Es guckt nach, ob gerade eine Taste gedrückt wird, und liefert das entsprechende Ergebnis, mehr nicht.
-
kbhit(), prüft im Grunde nicht ob der User gerade eine Taste drückt, sondern ob eine im Input-Puffer steht.
Erklärung: Alle gedrückten Tasten werden von Windows registriert und der Konsole in einen Puffer geschoben.
Wenn in diesem Puffer im Moment wo kbhit() aufgerufen wird was drin ist, dann okay, wenn nicht dann anderer rückgabewert.
Erklär mal, wie hättest du dir das vorgestellt?
MfG SideWinder
-
Original erstellt von <Jack>:
**
Aber wie ist das mit Spielen, da laufen doch auch sehr sehr viele Dinge wirklich
gleichzeitig ab: wie funktioniert das?---Darauf wollte ich eigentlich hinaus.
Ich kann mir nicht vorstellen dass man das alles mit schleifen konstruiren kann
oder z.B für jeden charakter ein eigenes programm laufen zu lassen.
Vielleicht kann mir, dass mal jemand ansatzweise erklären?!**Also bei Spielen läuft auch nichts gleichzeitig ab.
Bei Spielen ist das so, dass du erst die Inputs machst, dann die Kollisionsabfragen, und dann bewegst ( jetzt mal im groben ).
Du greifst halt fast direkt Hardware auf die zu, was wesentlich schneller ist, als über 2, 3 Ecken ( Konsole <-> Windows ) zu gehen.Für infos über die Programmierung von Spielen guck mal im Spiele-Grafik Forum, oder auf:
www.zfx-online.dep.s. Im Spiele-Grafik FAQ findest du noch mehr links.
-
Ich will so eine art "Pong" für die Konsole schreiben >>> und eben für zwei Spieler, und dabei vielleicht auch noch eine uhr laufen lassen und den punkte-
stand!!! das problem dabei, wie ich zwei tasten "gleichzeitig" entgegennehmen
kann, so dass sich jeweils einer der pongschläger nach oben oder unten bewegt,
und dazu gleichzeit die Zeit richtig aktualiesiert wird und auch der P.stand.
Ich bin mir eben nicht sicher ob es dann zu "gravierende" verzögerung kommt,wenn das alle mit schleifen verschachtel wird!?. Oder gibts ander möglichkeiten
ohne dabei von "threads" ahnung haben zu müssen.
Schreibt mir bitte nicht den kompletten code (will das selber raustüftel ;-))Mfg Jack
-
Also du könntest die eingaben nacheinander abfragen, bzw. immer 2 stellen im Buffer, und diese angaben, inklusive der Uhr, etc. später in einem Rutsch hin runterzuschreiben.
Pseudocode:struct Spieler { bool Eingabehoch, Eingabelink, ...; int PosX, PosY; }; struct Info { Spieler 1, 2; Uhr Zeit; } main() { while(1) { FüllenDerWerte(); malen(); } return 0; } FüllenDerWerte() { // struktur füllen } malen() { // struktur auswerten und die entsprechenden Infos malen. }
-
das lässt sich doch mit einer schleife lösen!
du schreibst dir ein paar funktionen, wie bewegen, figur malen usw..
und dann laäuft das in etwa so ab:
while(!fertig) { SpielerBewegen(); PunktestandAktualisieren(); ... usw ... FigurMalen(); PufferWechseln(); }
-
@ jack: die tastatur funktioniert hardwaremässig mit interupts (frag die von assembler).
mein tip für das was du suchst:
lass 2 threads laufen: einer für usereingabe und einen für zeichnen. und wenn du gleichzeitig gedrückte tasten willst, wüsst ich sowas: in nem 3. thread immer alle tasten abfragen ob gedrückt oder was auch immer (in win32 gibts da n event) und ein bool array [105] halten oder wieviele tasten du halt brauchst. da stteht dann jeweils ein true / false drin, je nach dem ob ne taste gerade gehalten wird oder net.