Pregunta

Un hilo separado crea un TidtcpClient y un timer. El ttimer se establece en 3s y si el TCPClient no está conectado, llama tcpClient.connect.
Si no hay un servidor al que conectarse, esto da como resultado un intento de conectarse cada 3 segundos.

El hilo principal (UI) no hace nada, pero si agarro la ventana con el mouse y lo muevo lentamente a través de la pantalla, se atasca cada 3 segundos durante aproximadamente 2 segundos, luego salta a la posición del ratón y sigue el mouse Nuevamente, hasta que ocurra el próximo intento de conectarse.

En otras palabras, el hilo principal parece estar bloqueado cuando el TCPClient intenta conectarse.

¿Por qué sucede esto, a pesar de que el TCPClient está en su hilo separado?

¿Fue útil?

Solución

Su timer funciona recibiendo mensajes WM_TIMER; Esos mensajes se envían utilizando la bomba de mensaje principal del VCL, en los hilos de VCL. Después de los 3 segundos, caduca su evento ttimer.ontimer se ejecuta en el hilo principal, entonces la llamada a Connect Funciona en el hilo VCL principal.

¡Te bloquean porque no estás roscando!

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top