3

別の Eclipse ジョブにスケジュールして参加する Eclipse ジョブの進行状況モニターを使用する適切な方法は何ですか? サブタスクをメインタスクに関連付けたいです。

理想的には、メイン モニターから作成されたサブタスクを実行するように指示できるようにしたいのですがSubProgressMonitor、これを行う方法がわかりません。メソッドを見てきましたJob.setProgressGroup(..., ...)が、ドキュメントには、グループを で作成する必要があることが示されていIJobManager.createProgressGroup()ます。

コンテキストのコード スニペットを次に示します。

@Override
protected IStatus run(final IProgressMonitor monitor) {
    try {
        monitor.beginTask("My Job A", 100);

        MyJobB subtask = new MyJobB();

        // how how should subtask's progress be tracked?
        subtask.schedule();
        subtask.join();

        return Status.OK_STATUS;

    } catch (Exception ex) {
        // return error status
    } finally {
        monitor.done();                 
    }
}
4

1 に答える 1

6

元の質問に答えるには、次のようにします。

public class MyJobA extends Job {

    private IProgressMonitor pGroup = Job.getJobManager().createProgressGroup();

    public MyJobA() {
        super("My Job A");
        setProgressGroup(pGroup, 50);
    }

    @Override
    protected IStatus run(IProgressMonitor monitor) {
        MyJobB subtask = new MyJobB();
        subtask.setProgressGroup(pGroup, 50);

        pGroup.beginTask("My Jobs", 100);
        try {
            monitor.beginTask("My Job A", 10);
            try {
                // do work
                monitor.worked(...);
            } finally {
                monitor.done();
            }

            subtask.schedule();
            subtask.join();
        } finally {
            pGroup.done();
        }
        return Status.OK_STATUS;
    }
}

プログレスグループを外部で作成すると、もう少しエレガントになります。

    IProgressMonitor group = Job.getJobManager().createProgressGroup();
    try {
        group.beginTask("My Tasks", 200);

        MyJobB b = new MyJobB();
        b.setProgressGroup(group, 100);
        b.schedule();

        MyJobC c = new MyJobC();
        c.setProgressGroup(group, 100);
        c.schedule();

        b.join();
        c.join();
    } finally {
        group.done();
    }

まだスケジュールされていないジョブは「完了」と表示されることに注意してください。

ProgressView

可能であれば、2 つのジョブをマージしてSubMonitorを使用することを検討します。

于 2013-01-31T22:37:34.367 に答える