Sujet : Re: Question sur les tasks
De : stef (at) *nospam* genesix.org (Stéphane Rivière)
Groupes : fr.comp.lang.adaDate : 19. Oct 2023, 14:41:50
Autres entêtes
Organisation : La Maison
Message-ID : <e6ecc48b-8d25-4368-a75b-a1dac5f7336b@genesix.org>
References : 1 2 3 4
User-Agent : Mozilla Thunderbird
Bonjour Nicolas,
Si tu veux facilement protéger Msg.Std des accès concurrents par plusieurs tâches, tu peux (temporairement) utiliser un mutex.
Super idée :)
Et l'implémentation gaze !
Dans v22.ads :
protected type Mutex is
entry Lock;
procedure Release;
end Mutex;
private
Owned : Boolean := False;
Dans v22.adb :
package body v22 is
use v22;
protected body Mutex is
entry Lock when not Owned is
begin
Owned := True;
end Lock;
procedure Release is
begin
Owned := False;
end Release;
end Mutex;
Dans la fonction privée qui factorise tous les Msg.Std/Dbg/Err :
procedure Put (Line_In : String;
Line_Level : String;
Title_On : Boolean := False) is
Line : String := Line_In;
Line_Disk : String := Line;
Line_Task : String := "";
Ansi_Begin : String := "";
Ansi_End : String := "";
M : Mutex;
begin
M.Lock;
.../...
M.Release;
end Put;
Merci Nicolas !!!
-- Stéphane RivièreIle d'Oléron - France