PDA

View Full Version : [c++] c.get() e pausa


RaMaR
10-09-2006, 09:30
Buongiorno. Mi sto avvicinando da un po' al c++ e mi č venuto un dubbio.
quando chiamo la funzione c.get() o semplicemente cin >> .... il programma va in pausa, finchč l'utente non inserisce qualcosa.
Ora, supponiamo che ho questo ciclo

while (true) {

// codice qui .....

int input=c.get();

}

Il ciclo esegue il codice finchč non arriva al c.get() dove si ferma aspettando l'input dell'utente. Per non far stoppare il ciclo e lasciare comunque la possibilitŕ all'utente di inserire un input, devo per forza utilizzare i thread (di cui conosco 0)?

In pratica io voglio fare un programma che esegue del codice e allo stesso tempo permettere all'utente di inserire dei comandi :).

Grazie e scusate per la mia super niubiaggine.

p.s. Ne approfitto per chiedervi: avete dei suggerimenti per iniziare a capire qualcosa sulla programmazione multithread in linux e in windows (c'č differenza, no?)?

trallallero
11-09-2006, 07:30
se sei all'inizio non é cosí semplice e dipende molto dal sistema sul quale lavori ...
Io per esempio su Sun Solaris mi devo addirittura scrivere la funzione per ex kbhit() che
ti permette un
while (!kbhit()) {...} (fai qualcosa fino a quando non preme un tasto)
mentre su Windows la Borland te la fa trovare bella e pronta.

RaMaR
11-09-2006, 08:53
ah quindi kbhit() ritorna true quando si preme un tasto? Anche in in MSVC c'č questa funzione, l'ho provata e funziona. In Linux invece, usando gcc, si ha qualcosa del genere?

AngeL)
11-09-2006, 09:11
esiste un modo per sapere quale tasto (o quali tasti) sono stati premuti?

trallallero
11-09-2006, 09:11
ah quindi kbhit() ritorna true quando si preme un tasto? Anche in in MSVC c'č questa funzione, l'ho provata e funziona. In Linux invece, usando gcc, si ha qualcosa del genere?
che c'entra gcc ?
Se ti serve (ma non so se funge su Linux) posso darti le funzioni che ho fatto ma le ho giá postate quí sul forum.
http://www.hwupgrade.it/forum/showpost.php?p=13516199&postcount=4

per compilare devi fare:
make -f makeKbUtil

EDIT: devi settare le variabili LIB, OBJ e C_SRC che io ho messo a:
LIB = $(HOME)/LIB
OBJ = $(HOME)/OBJ
C_SRC = $(HOME)/SRC/C

se hai problemi setta tutto alla dir dove metti i files per ex HOME:
LIB = $(HOME)
OBJ = $(HOME)
C_SRC = $(HOME)

trallallero
11-09-2006, 09:40
esiste un modo per sapere quale tasto (o quali tasti) sono stati premuti?
beh puoi usare la funzione:
int getkey( int block, int raw, struct extended *e_keys )
passando 0 a block in modo da non farla aspettare un tasto.
ti restituisce il tasto premuto.
Per i tasti speciali (F1, page, esc .. etc) il discorso si complica ...