Path: ...!news.mixmin.net!eternal-september.org!news.eternal-september.org!.POSTED!not-for-mail
From: Blady
Newsgroups: fr.comp.lang.ada
Subject: Re: Question sur les tasks
Date: Wed, 18 Oct 2023 21:22:32 +0200
Organization: A noiseless patient Spider
Lines: 70
Message-ID:
References:
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8; format=flowed
Content-Transfer-Encoding: 8bit
Injection-Date: Wed, 18 Oct 2023 19:22:33 -0000 (UTC)
Injection-Info: dont-email.me; posting-host="1873db54edfde95d223be82464085ff6";
logging-data="4020642"; mail-complaints-to="abuse@eternal-september.org"; posting-account="U2FsdGVkX18sCb/yx+0xFvE8HqKWBuYk"
User-Agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10.15; rv:102.0)
Gecko/20100101 Thunderbird/102.15.1
Cancel-Lock: sha1:/Da5qDoWnC8OzfF/RZtSVZRZfeg=
Content-Language: fr, en-US
In-Reply-To:
Bytes: 3633
Le 17/10/2023 à 17:57, Stéphane Rivière a écrit :
> Bonjour à toutes et tous,
>
> Je ne connais rien aux tâches Ada.
>
> Vite fait, afin de baisser le timeout de DB MySQL (par défaut à 8
> heures, que je baisserai bien à 1h30 pour réduire les ressources des
> connexions laissées ouvertes pour rien), je 'codouille' ceci dans le
> main de l'app. utilisateur... Msg.Std ou Sql.Ping ne sont pas réentrants
> mais comme c'est de l'affichage de log ou de la pure lecture de DB, je
> ne m'en fait pas pour l'instant...
>
> L'appel à C balaye la table des DB ouvertes et envoie un "SELECT 1"
> bidon à toutes les DB qui le nécessitent (donc pas les SQLite par exemple).
>
> Mais au démarrage de l'applic, pour que la line B affiche le message de
> log :
>
> TestGui.SQL_Ping > Armed for 3600s cycles
>
> Il faut que je mette une ligne A avec un appel à delay...
>
> J'aimerai bien comprendre le truc (et baisser mon ignorance).
>
>
> ---------------------------------------
> task SQL_Ping;
>
> task body SQL_Ping is
> Delay_Value : Duration := 3600.0; -- Wait 1 hour between pings
> begin
> A delay 0.1; -- Mandatory to displaying the message below
> B Msg.Std ("TestGui.SQL_Ping > Armed for " &
> Trim_Left (Field_By_Index (From_Latin_1 (Duration'Image
> (Delay_Value)), 1, ".")) & "s cycles");
> while True loop
> delay Delay_Value;
> Msg.Dbg ("TestGui.SQL_Ping > Sent");
> C Sql.Ping;
> end loop;
> end SQL_Ping;
>
> ---------------------------------------
>
> Merci d'avance (et généralement merci à la communauté, vous me faites
> bien progresser :).
>
Bonjour Stéphane,
La déclaration de SQL_Ping à ce niveau fait qu'elle démarre dès son
élaboration.
Et donc sans doute avant l'initialisation de quelques codes utiles à
Msg.Std que permet l'ajout du delay.
Ce qui rend le fonctionnement très dépendant de beaucoup de choses :-(
Du coup, dans ces cas là, j'ajoute toujours un "accept Start" (à la
place de ton "delay 0.1;") qui va attendre un appel à "Start" que tu vas
pouvoir mettre dans ton code une fois que tout a été initialisé.
Autres astuces:
.. pour une boucle infinie en Ada -> tout simplement "loop ... end loop;"
.. pour prendre directement l'image du type Duration avec UXStrings ->
déclarer la fonction :
function Image is new UXStrings.Conversions.Fixed_Point_Image (Duration);
HTH, Pascal.