Programación General > C/C++
Usar hilos pthreads en c++ para este caso
afrojene:
Es decir tendria que meter los datos en una estructura y pasar dicha estructura como argumento al hilo??
La estructura con mis parámetros me quedaría así:
--- Código: C++ --- struct{ Image* ImLeft, ImRight; vector<double> ptsLeft, ptsRight;}Parametros;
Y ahora crearía el hilo asi:
--- Código: C++ --- pthread_t hilo;pthread_create(&hilo, NULL, (void *) &P.getPoints, (void *) &Parametros);
Siendo ahora la funcion getPoints:
--- Código: C++ --- void getPoints(void *arg);
Asi estaría bien????
Muchas gracias
afrojene:
Muchas gracias por la info m0skit0, doy por supesto que lo que he puesto antes esta mal, entonces deberia crear una funcion desde la que llamar a getPoints(), por ejemplo:
--- Código: C++ --- void *Hilo(void *param){ Procesado P; P.getPoints(param->ImLeft, param->ptsLeft); pthread_exit(NULL);} Y ahora comenzaría el hilo así:
--- Código: C++ --- pthread_t hilo;pthread_create(&hilo, NULL, Hilo, (void *) &Parametros); Que os parece??
m0skit0:
--- Cita de: "afrojene" ---doy por supesto que lo que he puesto antes esta mal
--- Fin de la cita ---
Hombre, mal no está puesto que has cambiado los argumentos que recibe la función. Aunque la segunda forma está mejor porque así no modificas el código que ya tienes hecho, sólo añades otra función ;)
--- Cita de: "afrojene" ---P.getPoints(param->ImLeft, param->ptsLeft);
--- Fin de la cita ---
Aquí me parece que vas a tener que hacer un cast, porque param es void *.
Aparte de esto, parece válido.
afrojene:
OK, mañana cuando esté en la universidad lo probaré y os cuento.
Por cierto me puedes decir como se haría el cast de void* ese que me comentas??
Gracias
diego.martinez:
--- Cita de: "afrojene" ---Por cierto me puedes decir como se haría el cast de void* ese que me comentas??
--- Fin de la cita ---
Pues te cuento, cuando tienes un tipo de dato y quieres hacerlo pasar por otro, se hace Casting. En este caso, si tienes un dato en forma de estructura
--- Código: C++ ---MIESTRUCTURA * miST;
si quisieras pasar como parametro void* a miST el compilador te diria algo tal que:
cannot convert or there is no suitable conversion from MIESTRUCTURA * to void *.
para pasarlo como parametro tendrias que hacer una conversion a tipo de dato (void*).
Para ello coges el puntero y le especificas el casting escribiendo el tipo de al que lo quieres pasar entre parentesis, por ejemplo (void *).
--- Código: C++ --- void * v=(void*)miST;
entonces en v tendrias un puntero de tipo (void *).
ahora bien, una vez lo has pasado como parametro, en la funcion desconoces el antiguo tipo de dato del parametro con lo que no puedes interpretarlo como estructura, a no ser que vuelvas a hacer un casting.
--- Código: C++ --- ((MIESTRUCTURA*)v)->Campo_de_la_estructura :good:
Navegación
[#] Página Siguiente
[*] Página Anterior
Ir a la versión completa