Visualizzazione dei risultati da 1 a 7 su 7
  1. #1
    Utente di HTML.it
    Registrato dal
    Apr 2006
    Messaggi
    37

    far girare un programma fino alla pressione di un tasto

    Ciao a tutti e scusatemi se ciò che chiedo è banale,ma avrei la necessità di far partire un programma che fa aquisizioni tramite rs232 che si deve interrompere quando premo un carattere jolly da tastiera.Sotto windows la soluzione che ho trovato è la seguente:

    #include <stdio.h>
    #include <stdlib.h>
    #include <conio.h>
    int main(int argc, char *argv[])
    {

    for(;
    {
    printf("\n scrivi a per uscire");
    if(kbhit())
    {
    if(getch()=='a')
    break;
    else
    continue;
    }
    }
    system("PAUSE");
    return 0;
    }

    il problema che ho è che devo implementare qualcosa di simile tramite linux,il quale da come ho capito non ha la libreria <conio.h> dove è definita la funzione kbhit().Come posso fare???Ciao e grazie per l'aiuto!

  2. #2
    Sono interessato anch'io.

  3. #3
    Utente di HTML.it
    Registrato dal
    Jul 2005
    Messaggi
    746
    é solo un esempio, non mi mangiate

    codice:
    #include <stdio.h>
    #include <pthread.h>
    
    static int 	x;
    void *exit_thr(void *p);
    
    int main(void)
    {
    	int 		whawhawha;
    	pthread_t 	get_input;
    	
    	whawhawha = pthread_create(&get_input, NULL, exit_thr, NULL);
    	
    	for (; ;)
    	{
    		printf("%d\n", x);
    		if (x == -1)
    			break;
    		++x;
    	}
    	
    	return 0;
    }
    
    void *exit_thr(void *p)
    {
    	char c;	
    	c = fgetc(stdin);
    	
    	if (c == '*')
    	{
    		x = -1;
    		pthread_exit(NULL);
    		return 0;
    	}
    	else 
    	{
    		exit_thr(NULL);
    	}
    
    	return 0;
    }
    oltre a '*', deve essere premuto anche RETURN

  4. #4
    Utente di HTML.it
    Registrato dal
    Jul 2005
    Messaggi
    746
    un altro esempio:
    [anche uguale, ma senza malloc (e setts e flags non dichiarati come puntatori)]:

    codice:
    #include <stdio.h>
    #include <stdlib.h>
    #include <assert.h>
    #include <unistd.h>
    #include <termios.h>
    #include <pthread.h>
    
    static unsigned char 	c;
    void *exit_thr(void *p);
    
    int main(void)
    {
    	int 		x, p;
    	pthread_t 	get_input;
    	struct termios 	*setts;     /*"$ man termios" per maggiori dettagli.*/
    	tcflag_t	*flags;
    
    	x 	= 0;
    	flags 	= malloc(sizeof (tcflag_t));        /*...*/
    	setts 	= malloc(sizeof (struct termios));
    	assert((flags != NULL) 
    			&& (setts != NULL));
    	p 	= pthread_create(&get_input, NULL, exit_thr, NULL);
    
    	tcgetattr(STDIN_FILENO, setts);       
    	*flags 		= setts->c_lflag;     
    	setts->c_lflag	&= (~ICANON & ~ECHO); 
    
    	tcsetattr(STDIN_FILENO, TCSANOW, setts);	
    		
    	for (; ;) 
    	{
    		if (c == 'x')
    			break;
    		printf("%d\n", x);
    		++x;
    	}
    
    	setts->c_lflag = *flags;	         
    	tcsetattr(STDIN_FILENO, TCSANOW, setts); 
    	free(flags);
    	free(setts);
    
    	return 0;
    }
    
    void *exit_thr(void *p)
    {
    	while(!((c = getchar()) == 'x'))
    		;
    	c = 'x';    /*Non mi fido della getchar().*/
    	pthread_exit(NULL);
    	return 0;
    }
    lo compili con: gcc -ansi -pedantic -Wall -Werror -lpthread <file>

    ...non capisco il perchè, ma ogni tanto non termina appena
    viene premuto 'x'

    comunque la maggior parte (credo...) dei programmi
    utilizza la libreria 'curses' (o la 'ncurses') per fare certe cose.

  5. #5
    Utente di HTML.it
    Registrato dal
    Apr 2006
    Messaggi
    37
    grazie per l'aiuto!!!

  6. #6
    Utente di HTML.it
    Registrato dal
    Jul 2005
    Messaggi
    746
    ah, fai attenzione: quel ciclo for (che è solo di esempio) ci mette poco a spedire la cpu al 100%

  7. #7
    Utente di HTML.it
    Registrato dal
    Jun 2004
    Messaggi
    643
    mmm ho dato una rapidissima letta al 3d e ai vari post in esso contenuti...non vorrei dire cacchiate eprchè sono principiante ma francamente io non farei un ciclo for mettendo una break che fà scire dal ciclo se viene prmuto un determinato tasto....semplicemente metterei una condizione nel for in base alla quale si esce dal ciclo dopo la pressione di un tasto e una volta usciti il programma termina in modo naturale così si evita di usare breack che da quello che sò meno lo si usa meglio è...ripeto non vorrei dire cavolate...nel caso correggetemi

Permessi di invio

  • Non puoi inserire discussioni
  • Non puoi inserire repliche
  • Non puoi inserire allegati
  • Non puoi modificare i tuoi messaggi
  •  
Powered by vBulletin® Version 4.2.1
Copyright © 2024 vBulletin Solutions, Inc. All rights reserved.