Le besoin d'un langage hybride dans lequel les calculs s'expriment selon un mode flots de données et les séquencements de tâches dans un style plus impératif est apparu dans les applications traitées. Différentes extensions ont été faites des langages synchrones, en particulier avec le Grafcet. Pour SIGNAL nous essayons de proposer une extension sous forme d'intervalles d'instants qui étendrait le calcul d'horloges sur les suites de valeurs à des calculs sur les suites d'intervalles.
À cette fin, nous introduisons dans le langage SIGNAL la notion d' intervalle de temps [18], défini par ses événements de début et de fin, et désignant un état qui alterne entre les valeurs à l'intérieur et à l'extérieur. Par exemple l'intervalle I, initialement à l'intérieur, dans lequel on entre sur l'occurrence d'un événement B, et dont on sort sur l'occurrence de E est désigné par I := ]B,E] init inside.
Associer un tel intervalle de temps et un processus flots de données P définit une tâche, c'est-à-dire une activité non instantanée et son intervalle d'exécution (à l' intérieur, la tâche a le comportement du processus ; à l' extérieur, elle est inexistante : on lui a coupé l'horloge). Nous donnons deux façons de construire une tâche, qui sont aussi deux structures de préemption distinctes : dans la suspension P on I, le comportement de P reprend à l'entrée dans I à l'état courant de ses variables d'état, alors que dans l' interruption P each I, il reprend depuis son état initial (d'après les déclarations).
Une première version de cette extension à SIGNAL , appelée
SIGNAL GT (
Gestion de Tâches et d' intervalles), est
définie de façon équationnelle, ce qui ouvre la voie à sa
traduction en SIGNAL lui-même, en tant que structures dérivées
[18]. Cette version a été mise
en oeuvre sous la forme d'un préprocesseur au compilateur, qui
traduit les structures de SIGNAL GT
en SIGNAL [19].