From: Gautier write-only <gautier_niouzes@hotmail.com>
Subject: Q: Stopping a task running a long simulation
Date: Thu, 11 Mar 2010 05:08:24 -0800 (PST)
Date: 2010-03-11T05:08:24-08:00 [thread overview]
Message-ID: <f16d58ea-6ff2-44fd-85e1-fd482c2bf3e4@d27g2000yqf.googlegroups.com> (raw)
Hello,
Being still a bit new to tasking, I have a question of how to
terminate correctly a certain kind of task.
I have a task type which is waiting for running a potentially long
simulation; it is kind of a "daemon".
(the rationale of using a task type is that I have several simulations
that can be run in parallel, hence an array of these tasks).
Now this simulation occurs within a GUI, where the user might want to
stop it.
Here is the task type I've defined:
task type Simulation_type is
entry Start;
entry Run( [some parameters] );
entry Stop;
end;
Simulation: array(PF_version) of Simulation_type;
task body Simulation_type is
begin
accept Start;
loop
select
accept Stop;
exit;
or
accept Run( [some parameters] ) do
-- some quick parameter passing
end Run;
Compute( [some parameters] );
or
delay 0.2; -- relax
end select;
end loop;
end Simulation_type;
For aborting the simulation, I have tried this (happens when the main
GUI window is destroyed):
for v in PF_version loop
abort Daemons.Simulation(v);
end loop;
but (as expected if I've understood Barnes' chapter correctly), the
task waits for 'Compute' to complete.
At least, it is what happens with GNAT under Windows: despite the
above, the GUI closes but the program somehow is still alive and CPU-
busy.
I have an alternative to that.
'Compute' has a generic 'Feedback' procedure for showing progress.
I could with that way give a Boolean, user_abort, to 'Feedback', and
'Compute' would stop when an ad-hoc exception is raised, and return
normally on its own.
Meanwhile, I could call the 'Stop' entry which could be soon be
activated, since Compute would stop quickly, and the daemon task would
be terminated, and I could close the shop properly.
Now my question: is it the right way of doing it (I'm sure it will
work), or is there something more straightforward ?
TIA
Gautier
next reply other threads:[~2010-03-11 13:08 UTC|newest]
Thread overview: 7+ messages / expand[flat|nested] mbox.gz Atom feed top
2010-03-11 13:08 Gautier write-only [this message]
2010-03-11 18:11 ` Q: Stopping a task running a long simulation Anh Vo
2010-03-12 0:24 ` tmoran
2010-03-12 1:15 ` Gautier write-only
2010-03-12 1:27 ` Adam Beneschan
2010-03-12 1:50 ` Gautier write-only
2010-03-12 2:03 ` Gautier write-only
replies disabled
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox