» »

Linux, C, kaj uporabiti namesto getchar da ne bo čakal na input?

Linux, C, kaj uporabiti namesto getchar da ne bo čakal na input?

[SkA] ::

Programski jezik je C, okolje je Linux, mojo dilemo/neznanje pa bom poenostavil v hipotetični problem:

Program na zaslon uporabniku izpisuje večkratnike števila 3, vse dokler uporabnik ne pritisne številke 1-9, potem se mu na zaslon
začne izpisovati večkratnik pritisnene številke.

Moja težava je v tem. Če imam neko zanko, ki se ponavlja v nedogled in za branje številke uporabim getchar, potem seveda zadeva ne deluje ker se pri klicu funkcije getchar zadeva ustavi in čaka na vnos uporabnika. Kaj uporabiti oziroma kako narediti, da bo program še vedno preverjal vnos številke s tipkovnice ampak ga to ne bo ustavilo pri izpisovanju? Vsaj kakšni namigi so dobrodošli, ni treba kode pisati zaradi mene.

Hvala v naprej za odgovor. :8)
  • spremenil: [SkA] ()

[SkA] ::

Še eno dodatno vprašanje. Kako zadevo rešiti bolj splošno, se pravi ko ne govorimo o getchar funkciji ampak ko imamo pač dva sklopa kode, ki se morata nemoteno izvajati v zanki, pri čemer je ena odvisna od reakcije uporabnika druga pa ni - brez da se potem tista, ki ni odvisna od reakcije uporabnika, ustavi. Če razumete kaj mislim. :8)

Vesoljc ::

threadi?
Abnormal behavior of abnormal brain makes me normal...

mile ::

fork?

[SkA] ::

Hm ja, s threadi sm tud jez gledu pa sem reku bom vprašu preden se v dokumentacijo zakopljem. Za fork si pa že drugi ki mi je to reku .. pa še zdaj mi ni jasno kako naj bi fork uporabil v takem primeru? :8)

Brane2 ::

Sicer nisem C maher, samo ziher je kje v Glibcih itd kaka rutina ki ti da trenutno stanje na tipkovnici (ali pa denimo iz bufferja), na katerega ni treba cakati.

Kaj mislis, da pri kodiranju iger itd. tudi uporabljajo samo getchar ? ;)

BigWhale ::

fork, thread? Mnja, recimo, da fork niti ne bi pomagal. ;> Thread pa mogoce.

Kaj je potrebno narediti? S tipkovnice je potrebno brati scankode in potem malo mesetarit z njimi, pa bo. :)

Google power, ce nic pametnega ne ves... ;)

BigWhale ::

Jasno, treba je takoj lociti med forkom in threadom. Pri forkanju se iz enega procesa ustvarita dva, drugi proces je (skoraj) neodvisen od prvega. Skupnega nimata (skoraj) nic.

Pri threadih je drugace. En thread lahko precej konkretno vpliva na drug thread. In ga tudi sesuje... ;>

[SkA] ::

Brane2: to mi je jasno zato pa sprašujem :D

Okay, bomo threade preučili potem. Hvala za namige. :)

Person ::

Funkcija: int getch();

Npr.:

int ch;

do
{
ch = getch(); //prebere znak iz tipkovnice
ch = toupper( ch ); // pač, da so sam velike črke...

//do something...

} while( ch != 'Q' );
//dokler ni uporabnik pritisnil tipke Q

To je pač ANSI C.
Let's make something useful!

trs ::

Ce bos uporabljal getch() ne pozabit zlinkat zraven ncurses pa inicializirat libraryja. Man ncurses za vec informacij.

Person ::

Hm, sem pozabil povedat:)
Ma, meni je v C++ delalo vedno, sam sem moral includat "conio.h":
#include <conio.h>
Let's make something useful!

[SkA] ::

Courses zna brez da prekinja brat? Ne da ne čaka na enter ampak da prebere če je kaj za prebrat, če pa ni pa gre dalje... ?

Zgodovina sprememb…

  • spremenil: [SkA] ()

[SkA] ::

Never mind... nodelay(screenname, true) does the trick.

Hvala vsem! :)

user4683 ::

GetStdHandle(...);
ReadConsoleInput(...)

GetNumberOfConsoleInputEvents(...) // če je ta enak 0, potem ne beri z ReadConsoleInput

Upam, da bo tole delovalo (zgleda precej standardno, ampak sem preizkusil samo na windowsih).


Vredno ogleda ...

TemaSporočilaOglediZadnje sporočilo
TemaSporočilaOglediZadnje sporočilo
»

Problem z DOSom in katera knjiga za C++

Oddelek: Programiranje
111753 (1551) Fury
»

[c++] Kako ugotoviti katera tipka je bila pritisnjena

Oddelek: Programiranje
141432 (1204) 64202
»

C++ in pavza

Oddelek: Programiranje
161160 (921) napsy
»

skrivanje gesel

Oddelek: Programiranje
231202 (835) virtual_reality
»

osnove Cja!? branje znakov

Oddelek: Programiranje
5969 (876) DeViCeD

Več podobnih tem