Page 1 sur 1

[R] _Singleton ()

Posté : ven. 28 déc. 2018 10:06
par DimVar
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.

Re: [..] _Singleton ()

Posté : ven. 28 déc. 2018 10:26
par mikell
Essaye StringTrimRight(@ScriptName, 4)

Re: [..] _Singleton ()

Posté : ven. 28 déc. 2018 11:01
par DimVar
Ben ca va me donner le nom du fichier *.au3, et ?

Re: [..] _Singleton ()

Posté : ven. 28 déc. 2018 11:51
par orax
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)

Re: [..] _Singleton ()

Posté : ven. 28 déc. 2018 22:21
par DimVar
Merci Orax pour les details.
J'ai du mal à appréhender "chaine constante", qu'entends tu par là ?

Re: [..] _Singleton ()  

Posté : ven. 28 déc. 2018 22:43
par orax
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

Re: [..] _Singleton ()

Posté : sam. 29 déc. 2018 11:02
par DimVar
Ok, c'est plus clair, merci.

Re: [R] _Singleton ()

Posté : dim. 30 déc. 2018 11:49
par Tlem
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)