¡Buenas a todos!
Estoy haciendo un programa que tiene un bucle el cual quiero parar cuando el usuario presione la tecla 'q'. El problema esta en que con funciones como getch() y demas, el bucle para su ejecucion y espera a que el usuario presione una tecla y esto es lo que no quiero. La idea es que el bucle funcione en todo momento y que cuando el usuario presione 'q' se finalice el bucle.
He probado varias ideas que no me han salido bien....como por ejemplo usar hilos de tal forma que un hilo tiene el bucle y el otro hilo el getch()....tambien he probado ha hacer lo mismo pero con procesos y tampoco me ha salido bien....
Asi que como estoy un poco atascado, cansado y deseperado....creo que lo que me queda es hacer polling al teclado....el problema es que sé que esta tecnica va a funcionar seguro pero no se implementarlo....Imagino que sera con alguna funcion que lea el stdin o algo asi...
¿Alguien sabe como hacer polling al teclado para leer la pulsacion de una tecla?
NOTA: estoy programando en C para linux
Gracias, un saludo.
Usa hilos... Así matas el hilo en el momento que desees.
Dulces Lunas!¡.
Pufff ando atascado....la verdad es que no sa casi nada de hilos....
He probado esto....
#include <stdio.h>
#include <pthread.h>
#include <string.h>
void * pararBucle();
char * c="a";
int main(){
pthread_t hilo;
pthread_create(&hilo,NULL, pararBucle,NULL);
printf("Iniciando bucle infinito\n");
while(strcmp(c,"q")){
}
return 0;
}
void * pararBucle(){
char * aux="a";
while(strcmp(aux,"q"))
fgets(aux,1,stdin);
printf("Presionaste q\n");
c="q";
return (void *)"q";
}
Pero me da fallo de segmentacion....
¿Alguna sugerencia?
El problema se encuentra en esta parte:
char *aux = "a";
while (strcmp(aux,"q"))
fgets(aux,1,stdin);
El programa revienta porque la variable "aux" almacena la dirección en memoria de una cadena literal y estas no deben modificarse.
Un saludo
Volveremos a poner el link: http://foro.elhacker.net/programacion_cc/como_hacer_que_un_bucle_se_ejecute_durante_x_milisegundos_en_linux-t369295.0.html;msg1775072#msg1775072
¡Gracias por sus respuestas!
Al final el codigo me ha quedado asi...
#include <stdio.h>
#include <pthread.h>
#include <string.h>
#include <unistd.h>
void * pararBucle();
char * c="a";
int main(){
pthread_t hilo;
pthread_create(&hilo,NULL, pararBucle,NULL);
printf("Iniciando bucle infinito\n");
while(strcmp(c,"q")){
}
return 0;
}
void * pararBucle(){
char aux='a';
while(aux!='q')
read(STDIN_FILENO,&aux,1);
printf("Presionaste q\n");
c="q";
return (void *)"q";
}
Lo unico que tiene una variable global que no se como quitar.
He probado a pasarle la variable c a la funcion pthread_create() asi:
pthread_create(&hilo,NULL, pararBucle,(void *) c);
Y luego le paso un void * a la funcion pararBucle(void * c){}
Con estos cambios el programa compila, pero la funcion pararBucle cuando acaba no cambia el valor de c y el bucle infinito no para.
Asi que....¿que debo hacer para que la variable c quede compartida por ambos hilos?
Gracias, un saludo.