Du bist nicht angemeldet.

Stilllegung des Forums
Das Forum wurde am 05.06.2023 nach über 20 Jahren stillgelegt (weitere Informationen und ein kleiner Rückblick).
Registrierungen, Anmeldungen und Postings sind nicht mehr möglich. Öffentliche Inhalte sind weiterhin zugänglich.
Das Team von spieleprogrammierer.de bedankt sich bei der Community für die vielen schönen Jahre.
Wenn du eine deutschsprachige Spieleentwickler-Community suchst, schau doch mal im Discord und auf ZFX vorbei!

Werbeanzeige

WhiteMike

Alter Hase

  • »WhiteMike« ist der Autor dieses Themas

Beiträge: 507

Wohnort: Ulm

Beruf: Schüler

  • Private Nachricht senden

1

28.06.2008, 11:12

std::cin Spezialfall der Abfrage

Hey, Leute.

Dummerweise muss ich dieses Jahr noch eine Informatik-GFS in der Schule halten.

Meine Anwendung hat zwei Fenster. Das Konsolenfenster soll Infos ausspucken und Input einlesen, während das Windows-Fenster 3D-Grafiken zeichnen wird.
So weit so gut.

Das Problem ist, wie ich den Input aus der Konsole abfragen und gleichzeitig weiter im Windows-Fenster rumzeichnen kann.

Womit es nicht geklappt hat, ist das hier:

C-/C++-Quelltext

1
2
3
4
5
6
7
8
9
while(m_Irr.pDevice->run())
{
    std::string t_Input;
    if(std::cin.good())
    {
        std::cin >> t_Input;
    }
    getSimulation()->Run(t_Input);
}


Gibt es eine Möglichkeit, wie ich damit in einem Thread fertig werde, oder muss ich auf Multithreading ausweichen?

Mit freundlichen Grüßen,
WhiteMike

grek40

Alter Hase

Beiträge: 1 491

Wohnort: Dresden

  • Private Nachricht senden

2

28.06.2008, 11:32

Also wenn es sowieso nur Windows ist kannste ja mal die Funktionen der WinAPI dazu anschaun...

GetNumberOfConsoleInputEvents
ReadConsoleInput

Is zwar vielleicht nich das einfachste, aber zumindest geht es damit^^

Databyte

Alter Hase

Beiträge: 1 040

Wohnort: Na zu Hause

Beruf: Student (KIT)

  • Private Nachricht senden

3

28.06.2008, 11:38

Hmm ich würd schon multithreading benutzen... is glaube ich das einfachste oder ??

Das Gurke

Community-Fossil

Beiträge: 1 996

Wohnort: Pinneberg

Beruf: Schüler

  • Private Nachricht senden

4

28.06.2008, 12:36

Wenn du mit std::cin arbeitest wirst du wohl um Threads kaum rumkommen. Wenn es aber Windows only ist, kannst du dich in die Nachrichten der Konsole reinhängen (wie bei einem Win32 Fenster).

Die Nachrichten findest du in der MSDN: http://msdn.microsoft.com/en-us/library/ms682102(VS.85).aspx

Faule Socke

Community-Fossil

Beiträge: 1 915

Wohnort: Schreibtischstuhl

  • Private Nachricht senden

5

28.06.2008, 13:59

Ganz einfach:
[cpp]
#include <conio.h>

// ...
if(_kbit())
{
std::cin....
}

Das ganze in ne Schleife packen. Dann am besten noch ein Sleep(0); hintendranne, damit die CPU net leidet.

Socke

WhiteMike

Alter Hase

  • »WhiteMike« ist der Autor dieses Themas

Beiträge: 507

Wohnort: Ulm

Beruf: Schüler

  • Private Nachricht senden

6

28.06.2008, 14:13

Wow! Socke! Du bist super.

Das ist genau das, was ich gesucht hab und dazu noch im Singlethread-Modus. :)

Danke!

Mit freundlichen Grüßen,
WhiteMike

drakon

Supermoderator

Beiträge: 6 513

Wohnort: Schweiz

Beruf: Entrepreneur

  • Private Nachricht senden

7

28.06.2008, 14:14

Hier noch eine schöne Übersicht.

http://www.c-plusplus.de/forum/viewtopic.php?t=39320

@Faule Socke:
Was bringt deiner Meinung nach ein Sleep (0) der CPU ?

David_pb

Community-Fossil

Beiträge: 3 886

Beruf: 3D Graphics Programmer

  • Private Nachricht senden

8

28.06.2008, 15:17

Zitat von »"drakon"«


Was bringt deiner Meinung nach ein Sleep (0) der CPU ?


Das bewirkt dass der aufrufende Thread den Rest seiner Zeitscheibe abgibt und somit anderen Threads ermöglicht effektiv zu arbeiten, statt selbst unnötig Prozessorlast zu erzeugen.
@D13_Dreinig

Werbeanzeige