[C con Clase] duda sobre hilos de e jecución

Jorge Medina jorge en bsdchile.cl
Lun Dic 15 14:38:36 CET 2008


2008/12/14  <srd4121 en njit.edu>:
> Hola Nuria,
>
> Mensaje citado por: Núria Busom Figueres <meteorit666 en hotmail.com>:
>
>>
>> Hola a todos, tengo una dudilla. Estoy programado en C sobre Unix i
>> tengo que crear hilos, entonces uso
>>
>> #include <pthread.h>
>> int pthread_create(pthread_t *restrict thread, const pthread_attr_t
>> *restrict attr, void *(*start_routine)(void*), void *restrict arg);
>>
>> pero la rutina que debe ejecutar mi hilo tiene dos parametros, podriais
>> desirme como lo hago???
>>
>> //rutina de mis hilos
>> void Rutina_hilos (int A, int B);
>> // creación de los hilos
>> if((pthread_create(&tid[i], &attr, (void*) Rutina_hilos, (void*)
>> ???)!=0) -->  tengo que pasarle 2 enteros
>>
>> podeis ayudarme??
>>
>
> Veamos. Esto tiene dos posibles arreglos:
>
> 1. Rediseña tu función, 'Rutina_hilos()', para que acepte un solo
> parámetro: 'int *' o 'void *'. Por ejemplo,
>
> typedef void *(*FUNC_RUTINA_T)(void*);
>
> void Rutina_hilos( int param[] );
> ...
> int param[2];
> ...
> param[0] = 45;
> param[1] = -59;
>
> if( !pthread_create( &tid[i], &attr, (FUNC_RUTINA_T) Rutina_hilos, (void*)
> param ) )
> {
> ...
> }
>
> 2. Crear otra función que invoque a 'Rutina_hilos()' de la forma que tú
> diseñaste. Por ejemplo,
>
> typedef void *(*FUNC_RUTINA_T)(void*);
>
> void *Rutina_hilos( int A, int B );
>
> /* Hacemos todo el tinglado de invocar 'Rutina_hilos()' correctamente */
> void *auxRutinaHilos( void *pParam )
> {
>  int *ptr = (int *)pParam;
>  return Rutina_hilos( ptr[0], ptr[1] );
> }
> ...
> int param[2];
> ...
> param[0] = 45;
> param[1] = -59;
>
> if( !pthread_create( &tid[i], &attr, auxRutinaHilos, (void*)param ) )
> {
> ...
> }
>
>
> Existe otra forma, pero no te puedo garantizar de que te vaya a funcionar en
> tu compilador. Esto sería invocar 'pthread_create()' directamente con ese
> array de enteros. Por ejemplo,
>
> int param[2];
> ...
> param[0] = 45;
> param[1] = -59;
>
> if( !pthread_create( &tid[i], &attr, (FUNC_RUTINA_T) Rutina_hilos, (void*)
> param ) )
> {
> ...
> }
>
> Como ya he dicho, esto puede o no funcionar dependiendo del compilador y
> sistema operativo que tengas, o mejor dicho la forma de invocar funciones y de
> pasar parámetros.

si usa visual C++ en MSDN hay bastante documentacion para hilos de lo
contrario pthread es standar

> De todos modos, sugiero implementar una de las dos primeras soluciones, ya que
> la tercera es bastante dudosa de funcionar correctamente.
>
>
> Espero que esto te sirva.
>
> Steven
>
>
> _______________________________________________
> Lista de correo Cconclase Cconclase en listas.conclase.net
> http://listas.conclase.net/mailman/listinfo/cconclase_listas.conclase.net
> Bajas: http://listas.conclase.net/index.php?gid=2&mnu=FAQ
>



-- 
Jorge Andrés Medina Oliva.




Más información sobre la lista de distribución Cconclase