Buenos dias damas y caballeros.
Necesitaria a alguna alma generosa que me oriente como hacer esto.
Lo unico que necesito es crear un hilo y ejecutar una funcion.
Lo hice de forma global y anda todo bien, el problema viene cuando lo quiero hacer en una clase.
El codigo de la discordia:
DWORD WINAPI Socket::ThreadFunc(LPVOID){
recibirOrdenes();
return 0;
}
void Socket::SubProceso(){
DWORD dwThreadId;
CreateThread(NULL, 0, ThreadFunc, 0, 0, &dwThreadId);
}
Error:
Citarerror: argument of type 'DWORD (Socket:: )(void*)' does not match 'DWORD (*)(void*)'|
Me estoy poniendo nervioso por lo cual decidi acudir a ustedes.
Gracias de antemano.
Sencillamente no puedes hacerlo, CreateThread espera una función global (las funciones miembro no son globales porque solo existen dentro de un objeto creado).
Lo mejor que puedes hacer es pasar una referencia a tu clase:
DWORD WINAPI ThreadFunc(LPVOID* paquete)
{
paquete->RecibirOrdenes();
return 0;
}
void Socket::SubProceso()
{
DWORD dwThreadId;
CreateThread(NULL, 0, ThreadFunc,this, 0, &dwThreadId);
}
Cita de: amchacon en 20 Junio 2013, 20:06 PM
Sencillamente no puedes hacerlo, CreateThread espera una función global (las funciones miembro no son globales porque solo existen dentro de un objeto creado).
Lo mejor que puedes hacer es pasar una referencia a tu clase:
DWORD WINAPI ThreadFunc(LPVOID* paquete)
{
paquete->RecibirOrdenes();
return 0;
}
void Socket::SubProceso()
{
DWORD dwThreadId;
CreateThread(NULL, 0, ThreadFunc,this, 0, &dwThreadId);
}
recibirOrdenes devuelve un tipo int para saber cuando terminar de ejecutar la accion o no. Como lo harias en ese caso? si el parametro "paquete" lo pongo de tipo int no puedo acceder a recibirOrdenes() porque no es un puntero.
Huy perdón se me olvido el casting:
DWORD WINAPI ThreadFunc(LPVOID* paquete)
{
Socket* Parametro = (Socket*) paquete
Parametro->RecibirOrdenes();
return 0;
}
Y para que se repita simplemente pones un while (Parametro->RecibirOrdenes() != Valor).
Muchas gracias por tu ayuda, todo esto son conceptos nuevos para mi.