/ / eclipse rcp moniteur de progression - java, barre de progression, eclipse-rcp, travaux

moniteur de progression eclipse rcp - java, barre de progression, eclipse-rcp, emplois

J'utilise Job class pour créer une tâche et j'utilise le moniteur de progression pour afficher la progression dans la vue de progression.

    Job createNewJobRun(final int i, final Job previousJob) {
Job job = new Job("Test Job " + i) {
@Override
protected IStatus run(IProgressMonitor monitor) {
monitor.beginTask("Job is running", 100); //$NON-NLS-1$

if (previousJob != null) {
try {
previousJob.join();

} catch (InterruptedException e1) {
e1.printStackTrace();
}
}
// do the real work
monitor.done();
return Status.OK_STATUS;
}
};

job.schedule();
return job;

}

Je ne veux pas exécuter les travaux en parallèle maisséquentiellement, comment initialiser les travaux dans la vue de progression pour montrer que l’exécution s’effectuera une fois la précédente terminée. Le code ci-dessus attend le précédent, il est bloqué après le deuxième travail et aucune barre de progression ne s'affiche ...

Réponses:

3 pour la réponse № 1

La règle de planification devrait ressembler à ceci:

   public class MutexRule implements ISchedulingRule {
public boolean isConflicting(ISchedulingRule rule) {
return rule == this;
}
public boolean contains(ISchedulingRule rule) {
return rule == this;
}
}

fixer les règles et la planification:

   Job job1 = new SampleJob();
Job job2 = new SampleJob();
MutexRule rule = new MutexRule();
job1.setRule(rule);
job2.setRule(rule);
job1.schedule();
job2.schedule()

La source: Eclipse Wiki: FAQ Comment empêcher deux tâches de s'exécuter en même temps?


2 pour la réponse № 2

Vous devez examiner les règles de planification des travaux Eclipse.

Cela devrait aider. http://www.eclipse.org/articles/Article-Concurrency/jobs-api.html


0 pour la réponse № 3

Une solution possible consiste à utiliser les règles de planification proposées par @TomSeidel et @SambiReddy, mais cette solution présente un certain nombre de limitations.

Surtout, cela ne fonctionne que dans la mesure où vous ne le faites pasplanifiez plusieurs nouveaux travaux avant que tous les travaux précédents ne soient terminés, car les règles de planification normalement utilisées n'ont pas de concept de séquence. Cela peut être corrigé, bien que le résultat soit normalement assez difficile à maintenir.

Vous n’écrivez rien sur les emplois dequestion, mais si nous parlons de répéter le même travail encore et encore, alors la solution simple est de reprogrammer le travail (juste) avant qu'il ne soit terminé.

Job job = new Job("Test Job " + i) {
@Override
protected IStatus run(IProgressMonitor monitor) {
monitor.beginTask("Job is running", 100); //$NON-NLS-1$

// do the real work
monitor.done();

schedule(...);
return Status.OK_STATUS;
}
};

job.schedule();