PDA

View Full Version : [C] chiudere finestra dopo TOT secondi..


angelica
15-02-2004, 11:26
come si fa?

ad esempio, per chiudere la finestrella dos del programma, cliccando un tasto qualsiasi, termino il prog con un bel

getch()

e tutto è ok.
ma se volessi fare un ciclo del tipo "se non schiacci un carattere nel giro di 3 secondi, termina e chiudi la finestrella"...?

è fattibile? come?

grazie! :)

misterx
15-02-2004, 12:51
con un system("exit") o roba simile ?:)

cionci
15-02-2004, 12:55
Compilatore ?

angelica
15-02-2004, 15:08
Originariamente inviato da cionci
Compilatore ?
del cavolo...DMC da linea di comando.

però mi sono scaricata "MinGW Studio 2.05"...lo metto su?

ci sono differenze, vero? quali? (in effetti con dmc non mi compila neppure il programma con l'orario accanto al numero della discussione col "niubbo"...)

cionci
15-02-2004, 15:46
Mettere un'attesa del genere è un problema...a meno dif are un'attesa attiva...

Comunque...questa è una attesa attiva (cioè il programma non si ferma mai e controla fino a quando si è ottenuta la condizione di attesa):

time_t t1, t2;
t1 = time();

do {
t2 = time();
} while(difftime(t2, t1) >= 3.0);

Attende 3 secondi...
Ma il problema è un altro...le routine di lettura dalla standard input in C standard sono tutte bloccanti (l'unica che non mi ricordo è fgetc)... In teoria qui servirebbe qualcosa tipo il kbhit() dei compilatori Borland...

angelica
15-02-2004, 20:10
in che senso, bloccanti?
nel senso che non posso scegliere se terminare prima con un tasto o lasciar passare i 3 secondi?

comunque, mi posso procurare pure il borland...

grazie!

cionci
15-02-2004, 20:22
Originariamente inviato da angelica
comunque, mi posso procurare pure il borland...

Non è che sia il compialtore ideale, ma se proprio ti serve questa possibilità puoi usarlo...
Renditi conto che ci sono anche altre soluzioni più complesse (come utilizzare le API di Windows)...

angelica
15-02-2004, 20:28
Originariamente inviato da cionci
Non è che sia il compialtore ideale, ma se proprio ti serve questa possibilità puoi usarlo...Qual è il tuo preferito?
Renditi conto che ci sono anche altre soluzioni più complesse (come utilizzare le API di Windows)... Sono tutta orecchie! mi piace imparare cose nuove! :)

ah, puoi rispondere alla mia domanda di prima circa il "bloccanti"?

grazie!

cionci
15-02-2004, 20:37
Ho visto ora che kbhit c'è anche sull'ambiente che hai scaricato...

Allora fai così:

#include <stdio.h>
#include <conio.h>
#include <time.h>

int main()
{
time_t t1, t2;
int c = 0;

t1 = time(NULL);
do {
t2 = time(NULL);
if(kbhit())
c = getch();
} while(difftime(t2, t1) < 5.0 && c == 0);
if(c)
printf("%c", c);
}

Comunque fai a ttenzione a non usare con leggerezza kbhit e getch... Non sono funzioni standard !!! ;)

cionci
15-02-2004, 20:41
Originariamente inviato da angelica
ah, puoi rispondere alla mia domanda di prima circa il "bloccanti"?

Nel senso che sei bloccata in attesa fino a quando premi invio ;)
Una funzione di I/O non bloccante ritorna anche se non ci sono dati disponibili (kbhit testa se ci sono dati in attesa di essere letti)...
La particolarità di getch, invece, è che non attende l'invio per la lettura del carattere immesso (getc o getchar che sono funzioni standard invece lo fanno)...

angelica
15-02-2004, 21:04
ok, domattina metto su il minigw (ké su dmc non compila), e faccio le prove! :)

ah, lo so che getch() non attende l'invio..in effetti io volevo che il prog si chiudesse
1) o allo schiacciare di qualsiasi tasto
2) o, in assenza di input da tastiera, dopo tot secondi..

;)


Dato che non ho mai usato un IDE, ma blocconote e dmc, dici che MiniGW è ok, oppure c'è qualcos'altro che preferisci? Vorrei andare su un ambiente e restare lì sapendo che è buono (di te mi fido!), piuttosto che provarne a iosa...grazie! :)

cionci
15-02-2004, 23:21
MinGW32 è il compilatore... E' un porting del gcc (il compilatore di Linux, per intendersi)...

Con MinGW32 ci sono principalmente due ambienti integrati... Il più famoso è Dev-C++ ( www.bloodshed.net ) e MinGW Developer Studio ( www.parinya.ca )... Dev-C++ è il + conosciuto...ma sinceramente preferisco MinGW Developer Studio... Mi sembra più interessante...inoltre c'è anche la versione per Linux...

angelica
16-02-2004, 13:12
grazie per le info!

per quanto riguarda l'utilizzo delle API di windows, invece...cosa intendevi? :) (sono troppo curiosa!)

cionci
16-02-2004, 13:13
Bisognava usare l'API SetTimer e monitorare il il messaggio WM_KEYDOWN...

angelica
16-02-2004, 13:50
hai un buon link dove io possa andare per ferrarmi sulla programmazione API con il C?

(scusa se sono OT) :)

tornando a noi...non ho ancora installato la suite MinGW..tempo, a me!! :) (lo farò stasera)

misterx
16-02-2004, 14:08
sul sito della Microsoft :D