From: anon@anon.org (anon)
Subject: Re: Tasking issues
Date: Sun, 12 Aug 2007 09:00:27 GMT
Date: 2007-08-12T09:00:27+00:00 [thread overview]
Message-ID: <L_zvi.420569$p47.372414@bgtnsc04-news.ops.worldnet.att.net> (raw)
In-Reply-To: 1186851804.567302.223160@q4g2000prc.googlegroups.com
--
-- This works and is almost the same code that you used.
-- Exceptions to make the program function with the ability
-- to stop task.
--
-- For help it is better that you write your code
-- test with
-- gnatmake main.adb
-- then for help compile with:
-- gnat1 main.adb -gnatl >main.lst
--
-- Then copy and paste the main.lst file to your post
-- so that we can the compiler errors. Without too
-- much editing of the code.
--
with Ada.Text_io ;
use Ada.Text_io ;
procedure main is
task get_name;
task print_something;
continue : boolean := True ; -- task to continue running
task body get_name is
Name : String ( 1 .. 25 ) ;
Last : Integer ;
begin
loop
Get_Line ( Name, Last ) ;
-- Set stop flag
if Name ( 1 .. 4 ) = "stop" then
continue := false ;
end if ;
delay 0.0 ;
end loop ;
end get_name ;
task body print_something is
begin
loop
Put_Line ( "blah..." ) ;
delay 0.0 ;
end loop ;
end print_something ;
begin --- main
-- do nothing!
while continue loop
delay 0.0 ;
end loop ;
-- abort tasks. But because get_name may be in the process of
-- obtaining data from standard_input. it may require a CR/LF
-- to be entered to fully abort the 'get_name' task.
abort get_name ;
Put_Line ( "EOT -- get_name" ) ;
abort print_something ;
Put_Line ( "EOT -- print_something" ) ;
Put_Line ( "EOJ" ) ;
end main;
In <1186851804.567302.223160@q4g2000prc.googlegroups.com>, shaunpatterson@gmail.com writes:
>I'm having trouble with tasking in Ada. I'm used to working with
>pthreads
>in C/C++... and I'm finding tasks to be somewhat different/annoying.
>
>My basic problem is I want to have 2 threads in my program.
>
>One thread sits in the background and reads in messages,
>dispatches them, etc and the other thread reads off a queue
>and sends out messages when they are available.
>
>As an analogy, let's assume my background task just got
>input from the user (simulating the socket read) and the other
>task just printed out stuff.
>
>Something like
>
>procedure main is
>begin
> task get_name;
> task print_something;
>
> task body get_name is
> Name : String (1..25);
> Last : Integer;
> begin
> loop
> Get_Line (Name, Last);
> end loop;
> end get_name;
>
> task body print_something is
> begin
> loop
> Put_Line ("blah...");
> end loop;
> end print_something;
>
>begin --- main
>
> loop;
> null;
> end loop;
>end main;
>
>
>Of course, this doesn't work as I'd expect. Is there a way to
>"timeout" the
>first get_name thread... so the OS only waits on that thread for a
>short period
>of time to allow the other threads to do their business? and then go
>back to
>the thread?
>
>Thanks
>-- Shaun
>
next prev parent reply other threads:[~2007-08-12 9:00 UTC|newest]
Thread overview: 27+ messages / expand[flat|nested] mbox.gz Atom feed top
2007-08-11 17:03 Tasking issues shaunpatterson
2007-08-11 18:42 ` Dmitry A. Kazakov
2007-08-12 11:06 ` Simon Wright
2007-08-12 12:05 ` Dmitry A. Kazakov
2007-08-12 17:12 ` shaunpatterson
2007-08-12 18:03 ` Dmitry A. Kazakov
2007-08-12 22:10 ` Jeffrey R. Carter
2007-08-13 19:54 ` Simon Wright
2007-08-13 22:30 ` shaunpatterson
2007-08-14 7:10 ` Tasking issues => Book List anon
[not found] ` <13bulskfjvogv8e@corp.supernews.com>
2007-08-12 20:20 ` Tasking issues Simon Wright
2007-08-11 18:51 ` jimmaureenrogers
2007-08-11 19:08 ` Jeffrey R. Carter
2007-08-11 22:31 ` Steve
2007-08-12 9:00 ` anon [this message]
2007-08-12 9:43 ` Dmitry A. Kazakov
2007-08-12 21:39 ` anon
2007-08-12 22:15 ` Jeffrey R. Carter
2007-08-13 9:13 ` anon
2007-08-13 19:37 ` Simon Wright
2007-08-13 20:17 ` Markus E.L. 2
2007-08-14 0:40 ` Jeffrey R. Carter
2007-08-13 9:22 ` Dmitry A. Kazakov
2007-08-13 12:41 ` Larry Kilgallen
2007-08-13 13:22 ` Dmitry A. Kazakov
2007-08-12 21:03 ` Maciej Sobczak
2007-08-12 22:07 ` Jeffrey R. Carter
replies disabled
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox