Unamonos los programadores de taringa y compartamos nuestros codigos, ya sea java, C, C++, php, jsp, html, css, python.... etc etc etc.. Enterate tambien de las innovaciones en el software y nuevas distribuciones de Microsoft, Linux y MacOS
Ver más- 1,702 Miembros
- 560 Temas
- 308 Seguidores
Crear hilos con una función q es miembro d una clase [C++]
Quiero implementar un programa multi hilos en C++ y la función que quiero que se ejecute en ese hilo pertenece a una clase.
Por ahora lo estoy intentando con la función "_beginthread", el problema surge porque la función que le paso como parámetro no cumple con el tipo que requiere "_beginthread".
Como primer parámetro "_begnthread" toma "void (*) (void *)" pero el que le estoy pasando es "void (<miclase>:

(void*)". Creo que para este caso "_beginthread" no es la función a utilizar.
Alguien sabe de alguna funci'on compatible con lo que quiero realizar? o cual ser'ia el workaround para este caso?
http://www.copypastecode.com/173727/
El error que me da el compilador es este (en la descripci'on del c'odigo en el link coloco el error tambi'en)
C:UsersFranciscoDocumentsProgramacionCodigosCBMultiThreadingmain.cpp||In function 'int main()'

C:UsersFranciscoDocumentsProgramacionCodigosCBMultiThreadingmain.cpp|12|error: argument of type 'void (test:

(void*)' does not match 'void (*)(void*)'|
C:UsersFranciscoDocumentsProgramacionCodigosCBMultiThreadingmain.cpp|13|error: argument of type 'void (test:

(void*)' does not match 'void (*)(void*)'|
||=== Build finished: 2 errors, 0 warnings ===|
Gracias
- 0Calificación
- 0Seguidores
- 103Visitas
- 0Favoritos
Global
Argentina
Chile
Colombia
España
México
Perú
Uruguay
Venezuela
3 respuestas
Bueno, no sólo esa, sino ninguna función que encuentres aceptará como parámetros punteros a funciones miembro, porque además de que no están pensadas para ser usadas así, tendría que ser una función que acepte explícitamente void (test:
(void*) lo cual obviamente es imposible, porque test es un tipo creado por ti.
Una solución simple es usar una función global, que a su vez llame a la función miembro que quieras. Esta función (que sería la que le debes pasar a _beginthread()) aceptará como parámetro el objeto test que quieras usar. Algo así:
void funcion(void *objeto) {
test *tlocal = static_cast<test*>(objeto);
/* También podría ser: test *tlocal = (test*)objeto; */
tlocal->start(0);
}
y en main:
_beginthread(funcion,0,t1);
_beginthread(funcion,0,t2);
excelente, no lo habia pensado asi. Entendi mejor la segunda forma de llamar a la funcion. Muchas gracias
Acabo de aplicar tu sugerencia y funcionó perfectamente