Se connecter avec
S'enregistrer | Connectez-vous

Stopper l'éxécution aprés un certain temps

Dernière réponse : dans Programmation

Bonjour, je cherche à faire discuter une interface JAVA avec un serveur que j'ai développé en C.

Quand mon interface JAVA envoie une requête à mon serveur C, elle attend une réponse de sa part.

Le serveur C doit faire un certain traitement suivant la requête et retourné la réponse à l'interface JAVA.

Le soucis c'est qu'il peut arriver que mon serveur C ne revoie rien, ce qui fait que mon interface JAVA est toujours en attente de la réponse du serveur C, ce qui me frezze mon interface.

Ce que j'aimerais donc faire est que lorsque je veut récupérer le message de mon serveur C, si la fonction permettant de lire le retour su serveur C prends plus de 2 secondes à s'éxécuter, je l'interrompt. Si elle met moins de 2 seconds, alors pas de soucis, j'aurai la réponse de la part de mon serveur C.

J'ai regardé parmis les classes Threads et Timer, mais je ne voit pas quelque chose qui correspond à mon cas :
- Soit il s'agit d'action se répétant (ce qui n'est pas mon cas)
- Soit Avec la méthode join de Thrad, on va forcément attendre les 2 secondes, alors que cela est juste pour éviter qu'une requête dur trop longtemps.

Pour résumérer mon probléme, on pourrait dire que si au bout de 2 secondes une fonction n'à pas fini de s'éxécuté, je la stoppe. Mais si elle se termine avant les 2 secondes, je récupére son retour.

J'espére avoir été clair. N'hésité pas à me poser des questions si vous ne comprenez pas.

Autres pages sur : stopper execution certain temps

Lassé par la pub ? Créez un compte

Le truc c'est qur ma fonction doit être bloquante, car elle attend un message du serveur par rapport à une question. Je ne peut pas faire de traitement sans cette réponse. C'est pourquoi, j'aimerais que si cette réponse n'arrive pas au bout d'un temps de disons 5 secondes, j'affiche un message comme quoi il y'a eu une erreur de connexion ou autre ....

Implémenter le timeout sur le serveur est une idée en effet.
Mais on peut gagner du temps sur le timeout :
Je reformule le problème :
- l'appli en Java attend une réponse du serveur.
- le serveur renvoie une réponse ou RIEN. C'est là qu'il y a un problème de conception à mon avis. Le serveur devrait renvoyer une réponse quoi qu'il arrive.
Le serveur fait son traitement, si il y n'a pas de "solution" à ce traitement alors le serveur renvoie un false ou autre valeur arbitraire.

Le probléme est bien résolu avec le timeout.
J'ai bien pensé que le serveur C pouvait retourné une valeur lorsqu'il y'avait un probléme avec un SIGALRM par exemple si la requête prend trop de temps.
Mais on travaille à plusieurs sur le projet, et la personne en charge du serveur C n'à pas l'air trés motivé pour faire un SIGALRM sur la socket si la requête ne donne rien.
En fait, il y'a d'autres paramétres qui font que cette fonction était trés utile.
Merci pour votre aide
Lassé par la pub ? Créez un compte