A voir également:
- Synchronisation de variable mise à jour par un listener
- Mise a jour chrome - Accueil - Applications & Logiciels
- Mise a jour windows 10 - Accueil - Mise à jour
- Mise a jour chromecast - Accueil - Guide TV et vidéo
- Mise a jour kindle - Guide
- Mise à jour libre office - Accueil - Bureautique
2 réponses
Bonjour,
Déjà ce genre de boucle est à éviter dans un code (exécution d'instructions inutiles, donc gaspillage de ressources), c'est sûr tu te dis que ça ne bouffe rien, on a des Intel Core aujourd'hui. Mais ton projet n'est pas très gros, le jour où tu fais un projet de plus grand ampleur, et que tu as 500 boucles en attente dans ce style, ce n'est pas très bon.
Enfin bref, détail d'optimisation.
Si l'action est déclanché par un Listener, pourquoi ne pas déclanché une méthode via ce listener pour lancer ton action, plutôt que d'attendre que l'action soit réalisée ? Ou tu veux absolument faire l'action au bout de 10 sec même si le listener ne réagit pas ?
Déjà ce genre de boucle est à éviter dans un code (exécution d'instructions inutiles, donc gaspillage de ressources), c'est sûr tu te dis que ça ne bouffe rien, on a des Intel Core aujourd'hui. Mais ton projet n'est pas très gros, le jour où tu fais un projet de plus grand ampleur, et que tu as 500 boucles en attente dans ce style, ce n'est pas très bon.
Enfin bref, détail d'optimisation.
Si l'action est déclanché par un Listener, pourquoi ne pas déclanché une méthode via ce listener pour lancer ton action, plutôt que d'attendre que l'action soit réalisée ? Ou tu veux absolument faire l'action au bout de 10 sec même si le listener ne réagit pas ?
Avec les thread tu peux faire ça simplement :
Thread maj= new Thread() { @Override public void run() { // code qui met à jour _completed } } maj.start(); // début de la mise à jour // code qui peux se faire en parallèle de la mise à jour maj.join(); // attente de la fin de la mise à jour // code qui d'exécutera une fois la mise à jour terminée
Tout d'abord merci pour ta remarque. J'ai essayé de déclencher l'action ( référée comme le CODE A ) à partir du listener mais le problème est que le code qui fait le while est toujours exécuté avant l'arrivée de l'événement que j'attends . Je m'excuse j'aurais du mentionner ce point avant.
Je me demandais s'il y'avait une solution simple qui m'éviterait de modifier l'ordonnancement des appels qui serait très coûteux.
Je n'ai pas très bien saisi, ce que tu veux dire par là...
try {
long tBefore=System.currentTimeMillis();
while(!_completed && (System.currentTimeMillis() - tBefore) < 10000 )
{
Thread.sleep(100);
}
}
catch (InterruptedException e) {
e.printStackTrace(); }
// CODE A
soit exécuté avant la réception de l'event que j'attends. Disons que c'est un cheminement imposé qui fait que le CODE A ne peut être appelé directement à partir du listener.
Je suis désolé si c'est pas clair mais je suis encore relativement nouveau sur Java.
En tout cas merci pour ton aide