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 a jour windows 7 - Accueil - Mise à jour
2 réponses
arthurg95
Messages postés
2421
Date d'inscription
dimanche 24 février 2008
Statut
Membre
Dernière intervention
4 juin 2014
341
26 juil. 2013 à 12:47
26 juil. 2013 à 12:47
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 ?
KX
Messages postés
16753
Date d'inscription
samedi 31 mai 2008
Statut
Modérateur
Dernière intervention
25 novembre 2024
3 019
26 juil. 2013 à 20:18
26 juil. 2013 à 20:18
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
26 juil. 2013 à 15:25
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.
26 juil. 2013 à 15:29
Je n'ai pas très bien saisi, ce que tu veux dire par là...
26 juil. 2013 à 15:52
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
26 juil. 2013 à 18:11
29 juil. 2013 à 10:11