Package: GNAT.Threads

Dependencies

with System;

Description

This package provides facilities for creation of foreign threads for use as Ada tasks. In order to execute general Ada code, the run-time system must know about all tasks. This package allows foreign code, e.g. a C program, to create a thread that the Ada run-time knows about.

Header

package GNAT.Threads is
 

Type Summary

Void_Ptr

Other Items:

type Void_Ptr is access all Integer;

function Create_Thread
  (Code : System.Address;  -- pointer
   Parm : Void_Ptr;        -- pointer
   Size : Natural;         -- int
   Prio : Integer)         -- int
   return System.Address;
pragma Export (C, Create_Thread, "__gnat_create_thread");
Creates a thread with the given (Size) stack size in bytes, and the given (Prio) priority. The task will execute a call to the procedure whose address is given by Code. This procedure has the prototype

void thread_code (void *id, void *parm);

where id is the id of the created task, and parm is the parameter passed to Create_Thread. The called procedure is the body of the code for the task, the task will be automatically terminated when the procedure returns.

This function returns the Ada Id of the created task that can then be used as a parameter to the procedures below.

C declaration:

extern void *__gnat_create_thread (void (*code)(void *, void *), void *parm, int size, int prio);


procedure Destroy_Thread (Id : System.Address);
pragma Export (C, Destroy_Thread, "__gnat_destroy_thread");
This procedure may be used to prematurely abort the created thread. The value Id is the value that was passed to the thread code procedure at activation time.

C declaration:

extern void __gnat_destroy_thread (void *id);


procedure Get_Thread (Id : System.Address; Thread : System.Address);
pragma Export (C, Get_Thread, "__gnat_get_thread");
This procedure is used to retrieve the thread id of a given task. The value Id is the value that was passed to the thread code procedure at activation time. Thread is a pointer to a thread id that will be updated by this procedure.

C declaration:

extern void __gnat_get_thread (void *id, pthread_t *thread);

end GNAT.Threads;