• Jueves 14 de Noviembre de 2024, 04:38

Autor Tema:  Hilos en C++ Borland con APi  (Leído 2315 veces)

witchyfairy

  • Nuevo Miembro
  • *
  • Mensajes: 14
    • Ver Perfil
Hilos en C++ Borland con APi
« en: Domingo 19 de Julio de 2009, 18:26 »
0
Hola estoy haciendo un programa tipo messenger en c++ borland pero me lo pidieron con la api en donde a cada cliente le asigno un hilo le paso una estructura de la siguietne manera:
struct IP nueva_IP;
lect_con = CreateThread(NULL, 0,(LPTHREAD_START_ROUTINE)Hilo_del_cliente,(void *) &nuevaIP,0,&Thread_lect);

en la funcion del hilo hago esto:

void *Hilo_del_cliente(void *nueva_IP){
    //este es el cast
     void *estructura=(void*)nueva_IP;

La cosa es que necesito usar los datos de la estructura pero no se como acceder a los datos de esta alguien podria ayudarme pro favor  :wub:

Nota: Disculpen si mi post esta mal pero es la primera vez que uso un foro y no he leido bien las reglas proque me interesabamas exponer mi problema pero ahora voy a leer gracias

Eternal Idol

  • Moderador
  • ******
  • Mensajes: 4696
  • Nacionalidad: ar
    • Ver Perfil
Re: Hilos en C++ Borland con APi
« Respuesta #1 en: Domingo 19 de Julio de 2009, 19:14 »
0
El casting esta mal, en realidad no hay casting nueva_IP ya es un void *.

Mejor asi:
Código: C++
  1. DWORD WINAPI Hilo_del_cliente(LPVOID lpParameter)
  2. {
  3.   IP *nueva_IP = (IP*)lpParameter;
  4.  

Nacional y Popular En mi país la bandera de Eva es inmortal.


Queremos una Argentina socialmente justa, económicamente libre y  políticamente soberana.
¡Perón cumple, Evita dignifica!


La mano invisible del mercado me robo la billetera.

witchyfairy

  • Nuevo Miembro
  • *
  • Mensajes: 14
    • Ver Perfil
Re: Hilos en C++ Borland con APi
« Respuesta #2 en: Domingo 19 de Julio de 2009, 19:19 »
0
Cita de: "Eternal Idol"
El casting esta mal, en realidad no hay casting nueva_IP ya es un void *.

Mejor asi:
Código: C++
  1. DWORD WINAPI Hilo_del_cliente(LPVOID lpParameter)
  2. {
  3.   IP *nueva_IP = (IP*)lpParameter;
  4.  

La cosa es que cuando pongo :

Código: C++
  1.  void *Hilo_del_cliente(void *nueva_IP){
  2.  
  3.      struct IP *nuevo = (IP*)nueva_IP;
  4.  
[/quote]

me sale un error de sintaxis y no me deja avanzar!!!
« última modificación: Domingo 19 de Julio de 2009, 20:06 por witchyfairy »

Eternal Idol

  • Moderador
  • ******
  • Mensajes: 4696
  • Nacionalidad: ar
    • Ver Perfil
Re: Hilos en C++ Borland con APi
« Respuesta #3 en: Domingo 19 de Julio de 2009, 19:30 »
0
¿Que error? Copialo y pegalo por favor. ¿Y el codigo que yo puse te da error?

Nacional y Popular En mi país la bandera de Eva es inmortal.


Queremos una Argentina socialmente justa, económicamente libre y  políticamente soberana.
¡Perón cumple, Evita dignifica!


La mano invisible del mercado me robo la billetera.

witchyfairy

  • Nuevo Miembro
  • *
  • Mensajes: 14
    • Ver Perfil
Re: Hilos en C++ Borland con APi
« Respuesta #4 en: Domingo 19 de Julio de 2009, 20:02 »
0
Código: C++
  1. struct IP{
  2.         in_addr IPDireccion;
  3.         unsigned short IPPuerto;
  4.         SOCKET IPSocket;
  5.         }IP;
  6.  
  7. void AcceptoConexiones(SOCKET Socket)
  8.   SOCKET SockConexion;
  9.   struct IP nuevaIP;
  10.   int tamano = sizeof(DireccionLocal),crear;
  11.   while(1){
  12.         SockConexion = accept (Socket, (struct sockaddr*)&DireccionLocal,&tamano);
  13.         mnsj =  mnsj + " nConexion entrante desde:n" + (String)inet_ntoa(DireccionLocal.sin_addr) + (String)(DireccionLocal.sin_port);
  14.         nuevaIP.IPDireccion = DireccionLocal.sin_addr; //aqui lleno los datos de mi estructura IP
  15.         nuevaIP.IPPuerto = DireccionLocal.sin_port;
  16.         nuevaIP.IPSocket = SockConexion;
  17.         lect_con = CreateThread(NULL, 0,(LPTHREAD_START_ROUTINE)Hilo_del_cliente,(void *)&nuevaIP,0,&Thread_lect);//aqui ya hize el cast de estructura a void
  18.          }
  19.  
  20. }
  21. //----------------------------------------------------------------------------
  22. void *Hilo_del_cliente(void *nuevaIP){ //aqui recibo mi estructura como void
  23.  
  24.      struct IP *nueva = (IP*)nuevaIP;  //aqui me da error  (E2188:Error syntax)
  25.      ShowMessage("Entre al hilo que atiende al cada cliente");
  26.      SOCKET RemoteSocket = ((IP*)nuevaIP)->IPSocket; //Y cuando intento entrar a los datos de la estructura tambien me da error (E2188:Error syntax)
  27.      unsigned short portclient = ((*IP)nuevaIP)->IPPuerto;  
  28.  
Espero me entiendas, y muchas gracias por responderme  :beer:
« última modificación: Domingo 19 de Julio de 2009, 20:06 por witchyfairy »

Eternal Idol

  • Moderador
  • ******
  • Mensajes: 4696
  • Nacionalidad: ar
    • Ver Perfil
Re: Hilos en C++ Borland con APi
« Respuesta #5 en: Domingo 19 de Julio de 2009, 20:06 »
0
O agregas typedef delante de la estructura:
Código: C++
  1. typedef struct _IP
  2. {
  3.   int IPDireccion;
  4.   unsigned short IPPuerto;
  5.   int IPSocket;
  6. }IP;
  7.  

o borras el nombre de la misma de la ultima linea.

Código: C++
  1. struct IP
  2. {
  3.   int IPDireccion;
  4.   unsigned short IPPuerto;
  5.   int IPSocket;
  6. };
  7.  

Sino le tenes que poner SIEMPRE struct cuando quieras usarla:

Código: C++
  1. struct IP *nueva = (struct IP*)nuevaIP;
  2.  

Y para acceder ya no hacen falta mas castings ...

Código: C++
  1. SOCKET RemoteSocket = nueva->IPSocket;
  2.  

Nacional y Popular En mi país la bandera de Eva es inmortal.


Queremos una Argentina socialmente justa, económicamente libre y  políticamente soberana.
¡Perón cumple, Evita dignifica!


La mano invisible del mercado me robo la billetera.

witchyfairy

  • Nuevo Miembro
  • *
  • Mensajes: 14
    • Ver Perfil
Re: Hilos en C++ Borland con APi
« Respuesta #6 en: Domingo 19 de Julio de 2009, 20:09 »
0
Wow eres mi idolo :D  :rolleyes:  muchas muchas gracias!!! Ya lo hize y no hubo problema, quiza para ti fue un problema tonto pero a mi no me dejaba avanzar estare pro aqui dando mucha mas lata porque todavia no entiendo como hacer este messenger :D

Eternal Idol

  • Moderador
  • ******
  • Mensajes: 4696
  • Nacionalidad: ar
    • Ver Perfil
Re: Hilos en C++ Borland con APi
« Respuesta #7 en: Domingo 19 de Julio de 2009, 20:10 »
0
De nadas  B)

Nacional y Popular En mi país la bandera de Eva es inmortal.


Queremos una Argentina socialmente justa, económicamente libre y  políticamente soberana.
¡Perón cumple, Evita dignifica!


La mano invisible del mercado me robo la billetera.