Затмить все вакансии слушателя - PullRequest
2 голосов
/ 19 ноября 2009

Я пытаюсь разработать плагин, который будет выполнять какую-то работу, когда запланировано любое задание на затмение.

Обычно я хочу знать, когда задание находится в диалоговом окне выполнения, и отслеживать его.

Есть ли слушатель, который может быть настроен на отслеживание начала и окончания таких заданий?

Ответы [ 2 ]

2 голосов
/ 19 ноября 2009

Когда вы думаете об этом, ProgressView делает именно это: всякий раз, когда задание запускается, оно отображает его в своем представлении.
Обратите внимание, что, как уже упоминалось в этой теме, ProgressView тесно связан с API заданий затмения (т. Е. Он может не контролировать ни одной простой ванильной нити)

alt text
(из статьи О работе: API Eclipse Jobs )

Так что, может быть, вы можете начать с просмотра кода в org.eclipse.ui.internal.progress.ProgressView, для которого требуется ProgressViewerContentProvider на основе ProgressContentProvider (реализация IProgressUpdateCollector)

Все, кажется, основано на синглтоне ProgressViewUpdater, который создает один поток пользовательского интерфейса, отвечающий за мониторинг этих заданий:

    /**
     * Create the update job that handles the updatesInfo.
     */
    private void createUpdateJob() {
        updateJob = new WorkbenchJob(ProgressMessages.ProgressContentProvider_UpdateProgressJob) {
            /*
             * (non-Javadoc)
             * 
             * @see org.eclipse.ui.progress.UIJob#runInUIThread(org.eclipse.core.runtime.IProgressMonitor)
             */
            public IStatus runInUIThread(IProgressMonitor monitor) {

                //Abort the job if there isn't anything
                if (collectors.length == 0) {
                    return Status.CANCEL_STATUS;
                }

                if (currentInfo.updateAll) {
                    synchronized (updateLock) {
                        currentInfo.reset();
                    }
                    for (int i = 0; i < collectors.length; i++) {
                        collectors[i].refresh();
                    }

                } else {
                    //Lock while getting local copies of the caches.
                    Object[] updateItems;
                    Object[] additionItems;
                    Object[] deletionItems;
                    synchronized (updateLock) {
                        currentInfo.processForUpdate();

                        updateItems = currentInfo.refreshes.toArray();
                        additionItems = currentInfo.additions.toArray();
                        deletionItems = currentInfo.deletions.toArray();

                        currentInfo.reset();
                    }

                    for (int v = 0; v < collectors.length; v++) {
                        IProgressUpdateCollector collector = collectors[v];

                        if (updateItems.length > 0) {
                            collector.refresh(updateItems);
                        }
                        if (additionItems.length > 0) {
                            collector.add(additionItems);
                        }
                        if (deletionItems.length > 0) {
                            collector.remove(deletionItems);
                        }
                    }
                }

                return Status.OK_STATUS;
            }
        };
        updateJob.setSystem(true);
        updateJob.setPriority(Job.DECORATE);
        updateJob.setProperty(ProgressManagerUtil.INFRASTRUCTURE_PROPERTY, new Object());

    }
0 голосов
/ 20 июня 2012

Вы можете прослушать JobChangeListener в IJobManager для начала и окончания заданий.

IJobManager manager = Job.getJobManager();
manager.addJobChangeListener(myJobChangeListener);

IJobChangeListener получает следующие события.

public void aboutToRun(IJobChangeEvent event);
public void awake(IJobChangeEvent event);
public void done(IJobChangeEvent event);
public void running(IJobChangeEvent event);
public void scheduled(IJobChangeEvent event);
public void sleeping(IJobChangeEvent event);

Однако я не нашел способа отслеживать ход выполнения задания. Мне было бы любопытно, если у кого-то есть.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...