Ver Mensaje Individual
  #2  
Antiguo 30-10-2008
Avatar de cHackAll
[cHackAll] cHackAll is offline
Baneado?
 
Registrado: oct 2006
Posts: 2.159
Reputación: 20
cHackAll Va por buen camino
  1. El primer error que estas cometiendo es utilizar una variable que no es asignada (WHandle), por ello WSAAsyncSelect debería enviar los mensajes a la ventana con identificador 0, como esto es ilógico retorna error (SOCKET_ERROR).
  2. Es importante comprender que una aplicación de consola (como su nombre lo dice), es de tipo consola y no una ventana, por ende NO tiene una cola de mensajes y GetMessage entraría a un dead lock infinito. Para prevenir esto en una consola lo óptimo es crear una ventana la cual creará indirectamente la cola de mensajes.
  3. Cuando llamas al método del hilo dentro del mismo constructor del hilo (TThread) y sumado a esto el método tiene un loop, va a realizar una llamada directa tal cual si fuese cualquier otro método diferente a un hilo hasta que termine el loop. Lo que te esta dando la ilusión de que el hilo esta bien construido es que dentro del loop estas procesando la cola de mensajes (GetMessage -> TranslateMessage -> DispatchMessage) equivalente al Application.ProcessMessages. Para corroborar éste error y notar su gravedad prueba:
    Código Delphi [-]
    procedure TForm1.Button1Click(Sender: TObject);
    begin
     TServer.Create;
     ShowMessage('Never see me !')
    end;
    Considerando que esta falla es remediada hay un segundo problema GetMessage esperará un nuevo mensaje en la cola sin considerar la posibilidad de que el hilo sea terminado, esto puede causar la perdida de control en algunas situaciones.
  4. WSAStartup tiene la función de inicializar las funciones de sockets para el proceso ejecutor (~LoadLibrary ), esto debiese utilizarce cuando uno comenzará a utilizar los sockets y finalizarlo cuando uno termine, sin embargo en la mayoria de los sistemas éste tiempo es equivalente al tiempo de vida del proceso.
Aparte de MemoryLeaks y otros; aclaro que todo lo dicho fueron críticas constructivas a favor del conocimiento

Me temo que es complicado solucionar (para consola), dichas fallas, sin cambiar la escencia de dicho objeto (WSAAsyncSelect)

Saludos
__________________
RTFM > STFW > Foro > Truco > Post > cHackAll > KeBugCheckEx
Responder Con Cita