Skip to main content

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index] [List Home]
Re: [cdt-dev] Notification when Maketarget is done

If you require the first job to finish before starting the next then join should do the trick.

cebarne2@xxxxxxxxxxxxxxxxxxx wrote:

A lot of my problems may come from inexperience with threading and Eclipse
jobs.  Here is some partial-code of what I am trying to do.  Can anyone
find fault or have suggestions?

public class BMRuntimeJob extends Job {
   AbstractBuildManagerJob jobToRun;
   ...
   public BMRuntimeJob(AbstractBuildManagerJob job) {
      super(job.getJobName());
      jobToRun = job;
   }

   protected IStatus run(IProgressMonitor monitor) {
      jobToRun.run(monitor);
      return new Status(IStatus.OK, BuildManagerPlugin.getID(), IStatus.OK,
"", null);
   }
}
=======================
public class MakeTargetJob extends AbstractBuildManagerJob {

   IMakeTarget mtJobObject;
   ...
   public void run(IProgressMonitor monitor) {
      try {
         mtJobObject.build(monitor);
      } catch (CoreException e) {
         e.printStackTrace();
      }
   }
}
========================
public class CaptureConsoleJob extends Job {
   ...
   protected IStatus run(IProgressMonitor monitor) {
      BuildConsoleManager consoleManager = (BuildConsoleManager)
CUIPlugin.getDefault().getConsoleManager();
      IDocument consoleDocument =
consoleManager.getConsoleDocument(((IMakeTarget)
job.getJobObject()).getContainer().getProject());
      consoleDocument.get();
      return new Status(IStatus.OK, BuildManagerPlugin.getID(), IStatus.OK,
"Contents acquired", null);
   }
}
=========================
[action code]
final AbstractBuildManagerJob job = (AbstractBuildManagerJob) jobs[i];
Job getConsoleJob = new CaptureConsoleJob("Get " + job.getJobName() + "
Results", job);
Job jobToSchedule = new BMRuntimeJob(job);
jobToSchedule.schedule();
getConsoleJob.setPriority(Job.DECORATE);
getConsoleJob.schedule();

=========================
=========================

In the above partial-code, jobs[i] is an instance of MakeTargetJob.  Any
suggestions on how to get these two jobs to schedule correctly.  In the
current case, getConsoleJob always runs while the MakeTarget from
jobToSchedule is running.

Do I have a hope?

Thanks,

Chad


Dave Inglis <dinglis@xxxxxxx> Sent by: To cdt-dev-admin@ecl cdt-dev@xxxxxxxxxxx ipse.org cc Subject 11/04/2004 10:20 Re: [cdt-dev] Notification when AM Maketarget is done Please respond to cdt-dev@eclipse.o rg



IProject.build() is documented as long running (blocking), if you are
seeing otherwise maybe its not actually building... The background build
preference would not have any effect when invoking a build at this API
level. Looks like you'll need to dig deeper here.

Dave

cebarne2@xxxxxxxxxxxxxxxxxxx wrote:


BTW, thanks for the input guys.

I did try the IMaktarget.build() but it seemed to also happen in the
background (perhaps I should investigate this again).  Looking at the
implementation of MakeTarget, build uses a WorkspaceRunnable to do its
work.  It eventually calls project.build() to call the project builder,
which I assume is also sending the work to the background.

So, regardless of what method I choose to build the MakeTarget, will I

need

to turn-off the background build preference?

Thanks,

Chad





            Dave Inglis


            <dinglis@xxxxxxx>


            Sent by:

To

            cdt-dev-admin@ecl         cdt-dev@xxxxxxxxxxx


            ipse.org

cc


Subject

            11/04/2004 09:34          Re: [cdt-dev] Notification when


            AM                        Maketarget is done




            Please respond to


            cdt-dev@eclipse.o


                   rg







TargetBuild.buildTargets will create its own job and based of preference
setting may return right away (build in background), what you could do
is build the target your self via IMakeTarget.build() as this will block
until the build is finished.

Dave

cebarne2@xxxxxxxxxxxxxxxxxxx wrote:


I just tried join() and it seemed to do nothing to help.

  makeTargetJob().schedule();
  makeTargetJob().join();
  captureConsoleJob().schedule();

This seems to do nothing to delay the second job.

I've also tried setting priorites and that does nothing as well.

I've tried setting rules as follows:

  final MutexRule rule = new MutexRule();
  makeTargetJob.setRule(rule);
  captureConsoleJob.setRule(rule);
  makeTargetJob.schedule();
  captureConsoleJob.schedule();

No luck.  It seems that the makeTargetJob finishes after it calls
TargetBuild.buildTargets() , instead of waiting for buildTargets() to
complete.

Any suggestions?  Being able to wait for a MakeTarget to complete is
critical for this plug-in.

Thanks,

Chad Barnes
Rockwell Collins





           Alex Chapiro


           <achapiro@xxxxxxx


           >

To


           Sent by:                  cdt-dev@xxxxxxxxxxx


           cdt-dev-admin@ecl

cc


           ipse.org


Subject


                                     Re: [cdt-dev] Notification when


           11/04/2004 08:26          Maketarget is done


           AM




           Please respond to


           cdt-dev@eclipse.o


                  rg






Did you try Job.join()?

cebarne2@xxxxxxxxxxxxxxxxxxx wrote:




Is there any way to determine when a maketarget is done?  Or, at least
schedule a maketarget to run (using Job.schedule()), and force other
jobs
scheduled afterward to wait until it is complete?  I am working on a
Build
Manager in Eclipse that will allow a user to stack several different
operations (MakeTarget, External Tool, etc) and it will run them in
turn.
MakeTargets are giving me some trouble because I can't seem to get a
Maketarget to run in serial.  It always seems to run in its own parallel
thread.

I would like to be able to do the following:


makeTargetJob.schedule();
captureConsoleJob.schedule();
makeTargetJob2.schedule();
captureConsoleJob2.schedule();

...and be certain that "captureConsoleJob" will not run before
"makeTargetJob" is finished.

How do I poll the status of a make target?  Or, how can I make it run in
a
thread of my own design?

Thanks,

Chad Barnes
Rockwell Collins Inc.

_______________________________________________
cdt-dev mailing list
cdt-dev@xxxxxxxxxxx
http://dev.eclipse.org/mailman/listinfo/cdt-dev




_______________________________________________
cdt-dev mailing list
cdt-dev@xxxxxxxxxxx
http://dev.eclipse.org/mailman/listinfo/cdt-dev


_______________________________________________
cdt-dev mailing list
cdt-dev@xxxxxxxxxxx
http://dev.eclipse.org/mailman/listinfo/cdt-dev

_______________________________________________
cdt-dev mailing list
cdt-dev@xxxxxxxxxxx
http://dev.eclipse.org/mailman/listinfo/cdt-dev


_______________________________________________
cdt-dev mailing list
cdt-dev@xxxxxxxxxxx
http://dev.eclipse.org/mailman/listinfo/cdt-dev

_______________________________________________
cdt-dev mailing list
cdt-dev@xxxxxxxxxxx
http://dev.eclipse.org/mailman/listinfo/cdt-dev


_______________________________________________
cdt-dev mailing list
cdt-dev@xxxxxxxxxxx
http://dev.eclipse.org/mailman/listinfo/cdt-dev


Back to the top