elhacker.net cabecera Bienvenido(a), Visitante. Por favor Ingresar o Registrarse
¿Perdiste tu email de activación?.
 
Inicio Ayuda Buscar Ingresar Registrarse
28 Mayo 2012, 22:22  


Tema destacado: Sigue las noticias más importantes de elhacker.net en ttwitter!

+  Foro de elhacker.net
|-+  Programación
| |-+  Programación C/C++ (Moderadores: Eternal Idol, Littlehorse)
| | |-+  Error creando Thread (CreateThread)
0 Usuarios y 1 Visitante están viendo este tema.
Páginas: [1] Ir Abajo Respuesta Imprimir
Autor Tema: Error creando Thread (CreateThread)  (Leído 588 veces)
CeroX901

Desconectado Desconectado

Mensajes: 22



Ver Perfil
Error creando Thread (CreateThread)
« en: 17 Octubre 2011, 18:32 »

Hola, estoy intentando crear un Thread desde una Clase pero no logro hacerlo ya que me sale un error que dice:



previamente tengo definida la funcion en private: dentro de la clase:

Código
DWORD WINAPI Thread_Listen(LPVOID lpParam);

y claramente el método usado está definido de esta manera:

Código
DWORD WINAPI S_Server::Thread_Listen(LPVOID lpParam) {
do {
cl_[0] = accept(l_, NULL, NULL);
if (cl_[0] == INVALID_SOCKET) {
printf("Error_ACCEPT::%ld\n", WSAGetLastError());
}
noClients++;
} while (true);
   return 0;
}

Cuando intento compilar me sale lo siguiente:

Citar
error C3867: 'S_Server::Thread_Listen': falta la lista de argumentos de la llamada a la función; utilice '&S_Server::Thread_Listen' para crear un puntero al miembro

PD: Trabajo bajo Visual Studio 2010 Professional

Espero que me ayuden... Salud2  ;D


En línea
Queta

Desconectado Desconectado

Mensajes: 250



Ver Perfil
Re: Error creando Thread (CreateThread)
« Respuesta #1 en: 17 Octubre 2011, 19:00 »

¿Y por qué no pruebas a hacer lo que te dice el error?

En cualquier caso, sería mejor que depurases.

http://msdn.microsoft.com/en-us/library/b0x1aatf.aspx


« Última modificación: 17 Octubre 2011, 19:20 por Queta » En línea

"Intenta no volverte un hombre de éxito, sino volverte un hombre de valor." Albert Einstein.
CeroX901

Desconectado Desconectado

Mensajes: 22



Ver Perfil
Re: Error creando Thread (CreateThread)
« Respuesta #2 en: 17 Octubre 2011, 19:56 »

Intenté con la siguiente linea:

Código
HANDLE	hThread = CreateThread(NULL, 0, &S_Server::Thread_Listen, NULL, 0, &dwThreadId); 

Me aparece el siguiente error:

Citar
error C2664: 'CreateThread' : no se puede convertir el parámetro 3 de 'DWORD (__stdcall S_Server::* )(LPVOID)' a 'LPTHREAD_START_ROUTINE'

Sigo con la duda...
En línea
Queta

Desconectado Desconectado

Mensajes: 250



Ver Perfil
Re: Error creando Thread (CreateThread)
« Respuesta #3 en: 17 Octubre 2011, 20:58 »

Pues en teoría, tu primer código, debería funcionar.

Intenta depurar, repito; además que no tenemos suficiente código y puedes probar de solucionarlo con las opciones que vienen en la página que te dí.
En línea

"Intenta no volverte un hombre de éxito, sino volverte un hombre de valor." Albert Einstein.
CeroX901

Desconectado Desconectado

Mensajes: 22



Ver Perfil
Re: Error creando Thread (CreateThread)
« Respuesta #4 en: 17 Octubre 2011, 21:07 »

Logré solucionarlo de la siguiente manera   :rolleyes:

Arriba en private: lo modifiqué así:

Código
DWORD __stdcall Thread_Listen();

Cuando crea el proceso lo arreglé de esta manera:

Código
DWORD ThreadId;
DWORD (__stdcall S_Server::*pmfnMember)() = &S_Server::Thread_Listen;
HANDLE hthread=CreateThread(NULL, 0, * (LPTHREAD_START_ROUTINE *) &pmfnMember, this, 0, &ThreadId);

y el método donde ejecuta el código quedó así:

Código
DWORD S_Server::Thread_Listen() {
do {
cl_[0] = accept(l_, NULL, NULL);
if (cl_[0] == INVALID_SOCKET) {
printf("Error_ACCEPT::%ld\n", WSAGetLastError());
}
noClients++;
} while (true);
   return 0;
}

Me sirvió de ayuda la siguiente pagina: http://www.pocketpcjunkies.com/Uwe/Forum.aspx/wince-vc/2935/Threads-on-class

Espero que para los que tengan el mismo problema les ayude... Salud2! y Gracias! :D
En línea
Queta

Desconectado Desconectado

Mensajes: 250



Ver Perfil
Re: Error creando Thread (CreateThread)
« Respuesta #5 en: 17 Octubre 2011, 21:40 »

Logré solucionarlo de la siguiente manera   :rolleyes:

Arriba en private: lo modifiqué así:

Código
DWORD __stdcall Thread_Listen();

__stdcall es lo mismo que WINAPI. Está declarada en WinDef.h:

Código
#define WINAPI __stdcall

Enhorabuena por haberlo solucionado :D.
En línea

"Intenta no volverte un hombre de éxito, sino volverte un hombre de valor." Albert Einstein.
Eternal Idol
Moderador
***
Desconectado Desconectado

Mensajes: 4.391


Clarin miente, TN opera y los giles regurgitan.


Ver Perfil WWW
Re: Error creando Thread (CreateThread)
« Respuesta #6 en: 17 Octubre 2011, 23:19 »

Muy interesante y simple de implementar el hack la verdad, no lo conocia.
En línea



La economía nunca ha sido libre: o la controla el Estado en beneficio del Pueblo o lo hacen los grandes consorcios en perjuicio de éste.
Juan Domingo Perón
CeroX901

Desconectado Desconectado

Mensajes: 22



Ver Perfil
Re: Error creando Thread (CreateThread)
« Respuesta #7 en: 18 Octubre 2011, 01:03 »

__stdcall es lo mismo que WINAPI. Está declarada en WinDef.h:

Código
#define WINAPI __stdcall

Enhorabuena por haberlo solucionado :D.

Si me di cuenta... Gracias...  ;)
En línea
Páginas: [1] Ir Arriba Respuesta Imprimir 

Ir a:  

Powered by SMF 1.1.16 | SMF © 2006-2008, Simple Machines