Forum » Programiranje » 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.
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.
- 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.
[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?
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 ?
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... ;)
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... ;>
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
Okay, bomo threade preučili potem. Hvala za namige.
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.
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>
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] ()
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).
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 ...
Tema | Ogledi | Zadnje sporočilo | |
---|---|---|---|
Tema | Ogledi | Zadnje sporočilo | |
» | Problem z DOSom in katera knjiga za C++Oddelek: Programiranje | 1840 (1638) | Fury |
» | [c++] Kako ugotoviti katera tipka je bila pritisnjenaOddelek: Programiranje | 1489 (1261) | 64202 |
» | C++ in pavzaOddelek: Programiranje | 1225 (986) | napsy |
» | skrivanje geselOddelek: Programiranje | 1286 (919) | virtual_reality |
» | osnove Cja!? branje znakovOddelek: Programiranje | 1032 (939) | DeViCeD |