[R] _Singleton ()

Aide et conseils concernant AutoIt et ses outils.
Règles du forum
.
Répondre
Avatar du membre
DimVar
Niveau 10
Niveau 10
Messages : 763
Enregistré le : ven. 30 mai 2008 14:08
Status : Hors ligne

[R] _Singleton ()

#1

Message par DimVar » ven. 28 déc. 2018 10:06

Bonjour,

Pourrirez-vous éclairer ma lanterne sur cette fonction ?
La doc nous dit : String to identify the occurrence of the script
Mais encore ? Est ce le nom du script ? Si oui, une fois compilé et que je change le nom de l'exe ?

Merci.
Modifié en dernier par DimVar le sam. 29 déc. 2018 11:02, modifié 1 fois.
N'évoquons pas la pierre, les jeunes risqueraient d'en poire !

Avatar du membre
mikell
Modérateur
Modérateur
Messages : 5850
Enregistré le : dim. 29 mai 2011 16:32
Localisation : Deep Cévennes
Status : Hors ligne

Re: [..] _Singleton ()

#2

Message par mikell » ven. 28 déc. 2018 10:26

Essaye StringTrimRight(@ScriptName, 4)
" L'échec est le fondement de la réussite. " (Lao-Tseu )
" Plus ça rate, plus on a de chances que ça marche " (les Shadoks )

Avatar du membre
DimVar
Niveau 10
Niveau 10
Messages : 763
Enregistré le : ven. 30 mai 2008 14:08
Status : Hors ligne

Re: [..] _Singleton ()

#3

Message par DimVar » ven. 28 déc. 2018 11:01

Ben ca va me donner le nom du fichier *.au3, et ?
N'évoquons pas la pierre, les jeunes risqueraient d'en poire !

Avatar du membre
orax
Modérateur
Modérateur
Messages : 1479
Enregistré le : lun. 23 mars 2009 04:50
Localisation : ::1
Contact :
Status : Hors ligne

Re: [..] _Singleton ()

#4

Message par orax » ven. 28 déc. 2018 11:51

Je crois que monsieur le chat a lu trop vite ta question.
$sOccurrenceName est une chaîne quelconque, ce n'est pas forcément le nom du script.

Je compile le code suivant en A.exe et en B.exe.

Code : Tout sélectionner

_Singleton(@ScriptName)
MsgBox($MB_SYSTEMMODAL, "", "test")
Premier cas. Je n'utilise que A.exe.
  • J'exécute A.exe. Le message "test" s'affiche. Je ne ferme pas le script. À ce stade, il y a une instance de A.exe (avec $sOccurrenceName = "A.exe").
  • J'exécute à nouveau A.exe. Il y a donc deux instances de A.exe (avec $sOccurrenceName = "A.exe"). _Singleton détecte qu'il y a déjà une instance du script (avec $sOccurrenceName = "A.exe"). Le script s'arrête. Le message "test" NE s'affiche PAS.
Second cas. J'utilise A.exe et B.exe.
  • J'exécute A.exe. Le message "test" s'affiche. Je ne ferme pas le script. À ce stade, il y a une instance de A.exe (avec $sOccurrenceName = "A.exe"). Jusque là, aucun changement.
  • J'exécute B.exe. Il y a donc une instance de A.exe (avec $sOccurrenceName = "A.exe") et une instance de B.exe (avec $sOccurrenceName = "B.exe"). _Singleton voit qu'il n'y a qu'une seule instance de B.exe. Le script NE s'arrête PAS. Le message "test" s'affiche.
En général, il est donc préférable de mettre une chaîne constante pour $sOccurrenceName. Dans l'exemple du fichier d'aide, la chaîne est "test", mais une autre chaîne pourrait convenir. _Singleton("test", 1)
De petits détails peuvent faire toute la différence. — Quand la boule de neige commence à rouler… poussez-la. (Columbo)

Avatar du membre
DimVar
Niveau 10
Niveau 10
Messages : 763
Enregistré le : ven. 30 mai 2008 14:08
Status : Hors ligne

Re: [..] _Singleton ()

#5

Message par DimVar » ven. 28 déc. 2018 22:21

Merci Orax pour les details.
J'ai du mal à appréhender "chaine constante", qu'entends tu par là ?
N'évoquons pas la pierre, les jeunes risqueraient d'en poire !

Avatar du membre
orax
Modérateur
Modérateur
Messages : 1479
Enregistré le : lun. 23 mars 2009 04:50
Localisation : ::1
Contact :
Status : Hors ligne

Re: [..] _Singleton ()  

#6

Message par orax » ven. 28 déc. 2018 22:43

Je ne sais pas si le terme "chaîne constante" est bien choisi, mais il n'y a rien de compliqué. Je voulais simplement dire une chaîne de caractères qui ne varie pas d'une exécution du script à l'autre. La valeur de @ScriptName est susceptible de changer et elle n'est pas connue avant l'exécution du script. Alors que la chaîne "blabla...", par exemple, ne changera pas.

Code : Tout sélectionner

$a = "blabla..." ; chaîne de caractères "constante"
$b = @AutoItPID  ; cette valeur change à chaque exécution du script
De petits détails peuvent faire toute la différence. — Quand la boule de neige commence à rouler… poussez-la. (Columbo)

Avatar du membre
DimVar
Niveau 10
Niveau 10
Messages : 763
Enregistré le : ven. 30 mai 2008 14:08
Status : Hors ligne

Re: [..] _Singleton ()

#7

Message par DimVar » sam. 29 déc. 2018 11:02

Ok, c'est plus clair, merci.
N'évoquons pas la pierre, les jeunes risqueraient d'en poire !

Avatar du membre
Tlem
Site Admin
Site Admin
Messages : 11383
Enregistré le : ven. 20 juil. 2007 20:00
Localisation : Bordeaux
Status : Hors ligne

Re: [R] _Singleton ()

#8

Message par Tlem » dim. 30 déc. 2018 11:49

Bonjour.
Si vous souhaitez éviter certains problèmes concernant le fait que le script peut avoir été renommé voir ses ressources modifiées, il serait sans doute judicieux d'utiliser une structure de ce type :

Code : Tout sélectionner

#include <Misc.au3>

Global $ScriptName = "Script Test _Singleton()"
Global $ScriptVersion = "1.0.0"

If _Singleton($ScriptName, 1) = 0 Then
	MsgBox(16, "Attention", "Impossible de lancer ce programme plus d'une fois ! Veuillez fermer l'autre occurence.")
	Exit
EndIf

MsgBox(32, @ScriptName & " " & $ScriptVersion, "Bievenue dans " & $ScriptName & "  Version " & $ScriptVersion)
Thierry

Rechercher sur le forum ----- Les règles du forum
Le "ça ne marche pas" est une conséquence commune découlant de beaucoup trop de raisons potentielles ...

Une idée ne peut pas appartenir à quelqu'un. (Albert Jacquard) tiré du documentaire "Copié n'est pas volé".

Répondre