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
  • 0

Crear hilos con una función q es miembro d una clase [C++]

Hola,

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
  • 0
  • 0Calificación
  • 0Seguidores
  • 103Visitas
  • 0Favoritos

3 respuestas

@rrnum7 dijo Hace más de 3 meses:

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);

Tienes que ser miembro para responder en este tema