Foro de elhacker.net

Programación => Programación C/C++ => Mensaje iniciado por: soyloqbuskas en 24 Octubre 2012, 21:56 pm



Título: Bucle infinito y hilos en C
Publicado por: soyloqbuskas en 24 Octubre 2012, 21:56 pm
¡Buenas a todos!

Estoy haciendo un programa en C para linux y tengo problemas con los hilos...

Mi programa tiene un bucle que se cierra cuando el usuario presione "q". Pero claro si uso una funcion como getchar() dentro del bucle el bucle se parará y no quiero que pare el bucle. Asi que he pensado lanzar un hilo y que sea el hilo el que se quede parado para leer del teclado y que cuando el getchar() del hilo lea una 'q' modifique una varible que cierre el bucle.

Aqui os pongo el codigo que tengo....pero meda un par de errores de compilacion...

Código
  1. #include <stdio.h>
  2. #include <stdlib.h>
  3. #include <string.h>
  4. #include <pthread.h>
  5.  
  6. void *salir( void *ptr );
  7.  
  8. int main()
  9. {
  10.     pthread_t thread1;
  11.     char *salida = "";
  12.  
  13.     pthread_create( &thread1, NULL, salir, (void*) salida);
  14.     pthread_join( thread1, NULL);
  15.  
  16.     printf("bucle infinito\nPresione q para salir\n");
  17.        while(strcmp(salida,"q")){
  18.  
  19.        }
  20.     return 0;
  21. }
  22.  
  23. void *salir( void *ptr )
  24. {
  25.     char out='0';
  26.        while(out!='q'){
  27.                out=(char)fgetc(stdin);
  28.     ptr=(void *)"q";
  29.     printf("presionaste q\n");
  30. }

Y los errores de compilacion son estos:
Citar
funcion.c: In function ‘salir’:
funcion.c:30:1: error: expected declaration or statement at end of input
funcion.c:30:1: warning: control reaches end of non-void function [-Wreturn-type]

¿Alguien sabe como solucionarlos?

Un saludo.


Título: Re: Bucle infinito y hilos en C
Publicado por: soyloqbuskas en 24 Octubre 2012, 22:12 pm
Uups ya me di cuenta del fallo...tenia un corchete de mas...pero ahora tengo otros....resulta que no estoy incluyendo la libreria pthread.h y no se porque.....

code:
Código
  1. #include <stdio.h>
  2. #include <stdlib.h>
  3. #include <string.h>
  4. #include <pthread.h>
  5.  
  6. void *salir( void *ptr );
  7.  
  8. int main()
  9. {
  10.     pthread_t thread1;
  11.     char *salida = "";
  12.  
  13.     pthread_create( &thread1, NULL, salir, (void*) salida);
  14.     pthread_join( thread1, NULL);
  15.  
  16.     printf("bucle infinito\nPresione q para salir\n");
  17.        while(strcmp(salida,"q")){
  18.  
  19.        }
  20.     return 0;
  21. }
  22.  
  23. void *salir( void *ptr )
  24. {
  25.     char out='0';
  26.        while(out!='q')
  27.                out=(char)fgetc(stdin);
  28.     ptr=(void *)"q";
  29.     printf("presionaste q\n");
  30.     return ptr;
  31. }
  32.  
Compilador:
Citar
/tmp/cceoP4ms.o: In function `main':
funcion.c:(.text+0x33): undefined reference to `pthread_create'
funcion.c:(.text+0x47): undefined reference to `pthread_join'
collect2: ld returned 1 exit status

¿Que falla?

Un saludo.


Título: Re: Bucle infinito y hilos en C
Publicado por: naderST en 25 Octubre 2012, 03:31 am
Al compilar necesitas enlazar la librería de hilos (gcc tuprograma.c -lpthread).

PD: Por qué usas cadenas cuando puedes usar un caracter?


Título: Re: Bucle infinito y hilos en C
Publicado por: 0xDani en 25 Octubre 2012, 15:46 pm
http://foro.elhacker.net/empty-t369295.0.html