comp.lang.ada
 help / color / mirror / Atom feed
From: "Dr. Michael Paus" <paus@ib-paus.com>
Subject: Re: Difficult to describe problem
Date: Thu, 20 Jun 2002 16:04:42 +0200
Date: 2002-06-20T14:04:43+00:00	[thread overview]
Message-ID: <3D11E0FA.2070702@ib-paus.com> (raw)
In-Reply-To: 3D11C7BA.8040504@uk.thalesgroup.com

Nige wrote:
> Hi - Sorry about the ambiguous title of this post, but it's hard to sum 
> up the problem.
> 
> What I have is a simple Ada interface to the Xlib function which 
> contains functions for creating windows, and drawing in them, etc.
> 
> The package is a generic, with a procedure passed as a parameter to
> handle events generated by X. Inside the package is a task which 
> examines the X event list and calls the procedure as required.
> 
> I also have another generic package which provides a menu by 
> instantiating it with an enumeration type and another procedure. This 
> menu package uses the above window package to create a window and fill 
> it with the elements of the enumeration type. When one of the items is 
> clicked on, the procedure is called.
> 
> The problem is that if I instantiate the windows package and the menu 
> package within the same executable, I end up with two tasks, each 
> processing the X events. This works OK, most of the time, but sometimes 
> one of the task fails during elaboration.
> 
> I have used a protected type declared externally to both packages to 
> single thread the whole thing, but this still doesn't prevent the problem.
> 
> Ideally, I'd like to integrate the menu package into the window package 
> so that they both use the same event loop (task) which I think will cure 
> the problem.
> 
> The final problem I have is how to integrate it. If the menu package 
> remains generic, it can't be called by the task. If I make it non 
> generic, I can't specify an enumeration for the menu when it is created.
> 
> What I'd really like to do is to make the menu package a non generic and 
> somehow pass an enumeration type to it. If not I'll have to pass a list 
> of pointers to strings or something.
> 
> Sorry for the long post - any ideas welcommed.
> 
> Nige.
> 

In Ada95 it is possible to pass an instance of a generic package to another
generic package in order to avoid multiple instantiations. Have a look at
chapter 12.7 of the Ada95 RM. If I understood your problem description correctly
this should help you to avoid the task duplication.

Michael




  reply	other threads:[~2002-06-20 14:04 UTC|newest]

Thread overview: 6+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2002-06-20 12:16 Difficult to describe problem Nige
2002-06-20 14:04 ` Dr. Michael Paus [this message]
2002-06-20 14:56 ` Stephen Leake
2002-06-21 15:09 ` Ted Dennison
2002-06-22 18:17   ` Simon Wright
2002-07-08  7:37     ` Nige
replies disabled

This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox