Bucle infinito y hilos en C

Iniciado por soyloqbuskas, 24 Octubre 2012, 21:56 PM

0 Miembros y 1 Visitante están viendo este tema.

soyloqbuskas

¡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...


#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <pthread.h>

void *salir( void *ptr );

int main()
{
     pthread_t thread1;
     char *salida = "";

     pthread_create( &thread1, NULL, salir, (void*) salida);
     pthread_join( thread1, NULL);

     printf("bucle infinito\nPresione q para salir\n");
        while(strcmp(salida,"q")){

        }
     return 0;
}

void *salir( void *ptr )
{
     char out='0';
        while(out!='q'){
                out=(char)fgetc(stdin);
     ptr=(void *)"q";
     printf("presionaste q\n");
}


Y los errores de compilacion son estos:
Citarfuncion.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.
"Si tienes 1 manzana y yo tengo otra manzana...
y las intercambiamos, ambos seguiremos teniendo 1 manzana.
Pero...si tu tienes 1 idea y yo tengo otra idea...
y las intercambiamos, ambos tendremos 2 ideas."


George Bernard Shaw

soyloqbuskas

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:

#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <pthread.h>

void *salir( void *ptr );

int main()
{
     pthread_t thread1;
     char *salida = "";

     pthread_create( &thread1, NULL, salir, (void*) salida);
     pthread_join( thread1, NULL);

     printf("bucle infinito\nPresione q para salir\n");
        while(strcmp(salida,"q")){

        }
     return 0;
}

void *salir( void *ptr )
{
     char out='0';
        while(out!='q')
                out=(char)fgetc(stdin);
     ptr=(void *)"q";
     printf("presionaste q\n");
     return ptr;
}

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.
"Si tienes 1 manzana y yo tengo otra manzana...
y las intercambiamos, ambos seguiremos teniendo 1 manzana.
Pero...si tu tienes 1 idea y yo tengo otra idea...
y las intercambiamos, ambos tendremos 2 ideas."


George Bernard Shaw

naderST

Al compilar necesitas enlazar la librería de hilos (gcc tuprograma.c -lpthread).

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

0xDani

I keep searching for something that I never seem to find, but maybe I won't, because I left it all behind!

I code for $$$
Hago trabajos en C/C++
Contactar por PM