2014-09-20 9 views
0

La question à propos de HTTP est implémentée dans un thread utilisant IdHTTP. Je veux terminer le fil gracieusement si nécessaire. Pour cela, je vérifie périodiquement la propriété Terminated dans l'événement HTTPWork de IdHTTP. Si la propriété terminate est définie, la méthode IdHTTP.disconnect est appelée et le thread se termine.Delphi: comment terminer gracieusement un thread qui utilise IdHTTP pendant un timeout de connexion?

Cela fonctionne bien, mais considérez le scénario problématique suivante:

Pour une raison quelconque le réseau tombe en panne lorsque le fil est démarré. Après un délai d'expiration, il existe une exception d'erreur de socket qui est également OK, mais pendant l'intervalle de délai d'attente, aucun événement n'est déclenché depuis IdHTTP et il n'y a donc aucun moyen de vérifier la propriété terminée. Donc, la question est de savoir comment terminer gracieusement un thread qui utilise IdHTTP pendant un délai de connexion?

+6

Ne contrôlez pas votre flux d'exécution de threads par des événements 'TIdHTTP'. – TLama

+0

@TLama: IdHTTP fait le travail actuel. Y a-t-il une autre alternative? – user2046977

Répondre

2

L'approche la plus gracieuse consiste simplement à laisser le fil de temps expirer, n'essayez pas de le forcer. Mais si vous devez le forcer, vous pouvez appeler TIdHTTP.Disconnect() à partir d'un autre contexte de thread, tel que celui qui essaie de terminer votre thread de travail. Toute opération de socket suivante, ou toute opération en cours, échouera immédiatement avec une erreur de socket dans le contexte du thread de travail.

Questions connexes