Question

Un thread séparé crée un TidTCPClient et un TTimer.Le TTimer est défini sur 3s et si le TCPClient n'est pas connecté, il appelle TCPClient.Connect.
S'il n'y a pas de serveur auquel se connecter, cela entraîne une tentative de connexion toutes les 3 secondes.

Le thread principal (UI) ne fait rien, mais si j'attrape la fenêtre avec la souris et la déplace lentement sur l'écran, elle reste bloquée toutes les 3 secondes pendant environ 2 secondes, puis elle passe à la position du curseur de la souris etsuit à nouveau la souris jusqu'à ce que la prochaine tentative de connexion se produise.

En d'autres termes, le thread principal semble être bloqué lorsque le TCPClient tente de se connecter.

Pourquoi cela se produit-il, même si le TCPClient est dans son thread séparé?

Était-ce utile?

La solution

Votre TTimer fonctionne en recevant des messages WM_TIMER;Ces messages sont distribués à l'aide de la pompe de messages principale de la VCL, dans les threads de la VCL.Après l'expiration des 3 secondes, votre événement TTimer.OnTimer s'exécute dans le thread principal , donc l'appel à Connect s'exécute dans le thread principal de la VCL.

Vous êtes bloqué parce que vous ne filmez pas!

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top