c ++ - Asynkron Windows Console input, mens udskrivning

Indlæg af Hanne Mølgaard Plasc

Problem



Langtidslæser, første gangs plakat: D


Jeg har problemer med at prøve at læse input samtidig med at du udsender samtidigt. Jeg har brug for en serverkonsol til mit spil, som kan modtage input, mens du udsender og ikke ødelægger bufferen.


For eksempel skriver jeg 'Hello World' og i processen bliver spillernes dødsfald, dræbte osv. Udleveret til konsollen, hvilket ville resultere i noget som:



  Hej * Spiller dræbt Player2 * world



Tak på forhånd

Bedste reference


I stedet for at skrive output direkte til konsollen, hvorfor ikke hente et GUI vindue?


Derefter har du kun et område, hvor output er rettet, og et separat inputområde nederst, hvor du kan skrive kommandoer. Kunne ikke lide hvordan en irc klient ville se ud.


Hvis det kun skal være konsol, vil jeg foreslå at bruge noget som ncurses (eller PDCurses) til at oprette en tekstbaseret grænseflade.

Andre referencer 1


Uden at tænke for hårdt om dette, synes jeg, du enten har brug for en ikke-blokkerende input rutine for stdin, noget som getch (), men vender bare tilbage, hvis der ikke er noget at læse, som du kalder i en loop, mens du også behandler output, eller du har brug for to tråde: en til at læse, en til at skrive.

Andre referencer 2


Du udvikler konsollen selv, så det skal ikke være et stort problem.


Konsollen er dybest set et sæt tekstlinjer, der bliver gengivet. Brugerindgangen ekkoeres, så brugeren ser, hvem han skriver. Det betyder at den sidste linje i konsollen er speciel, det er den 'redigerbare input buffer'. Alle andre linjer udskrives. Når brugeren rammer Enter Du udfører redigeringsbufferen. Trin 1 i udførelsen laver en privat kopi af redigeringsbufferen, trin 2 rydder redigeringsbufferen, og trin 3 kopierer den private kopi til output.


Derfor er der kun et partiel linie, og det ændres kun ved brugerindgang. Alle andre linjer er komplette og ændres line-by-line. Din programlogging sker mellem to brugerindgange og får derfor itws egne line. I et multi-threaded program betyder dette, at 'Console :: AddLine' -funktionen skal bruge en intern mutex (CriticalSection for Win32).

Andre referencer 3


Det lyder som om du har brug for et lag mellem koden og din konsol. Opret et indpakningsobjekt, der gør hele konsollen I/O. Når nogen kalder sin WriteLine-metode, skal wrappen slette den aktuelt viste indgang (hvis nogen), skrive linjen og derefter skrive indgangen igen under den.