Page 1 sur 1

[R] Switch et variable

Posté : lun. 02 juil. 2018 13:01
par jpascal
Bonjour,

Désolé pour le titre peu explicite.

Dans l'aide GUI Reference - MessageLoop Mode, l'exemple contient :

Code : Tout sélectionner

Local $iMsg = 0
While 1
    $iMsg = GUIGetMsg()
    Switch $iMsg
        Case $iOKButton
            MsgBox($MB_SYSTEMMODAL, "GUI Event", "You selected the OK button.")

        Case $GUI_EVENT_CLOSE
            MsgBox($MB_SYSTEMMODAL, "GUI Event", "You selected the Close button. Exiting...")
            ExitLoop
    EndSwitch
WEnd
Est-ce que ce code est aussi performant ?

Code : Tout sélectionner

While 1
    Switch GUIGetMsg()
        Case $iOKButton
            MsgBox($MB_SYSTEMMODAL, "GUI Event", "You selected the OK button.")

        Case $GUI_EVENT_CLOSE
            MsgBox($MB_SYSTEMMODAL, "GUI Event", "You selected the Close button. Exiting...")
            ExitLoop
    EndSwitch
WEnd
ou le problème vient-il du fait que GUIGetMsg() est testé à chaque Case et il vaut donc mieux utiliser la variable $iMsg ?

Re: [..] Switch et variable

Posté : lun. 02 juil. 2018 13:45
par orax
Logiquement, GUIGetMsg() est testé au niveau du Switch, il n'est pas testé à chaque Case. Donc le premier code n'est pas plus performant.
On peut avoir une idée de la performance des deux versions en utilisant TimerInit() et TimerDiff().
#include <Constants.au3>
#include <GUIConstantsEx.au3>

Local $hGUI = GUICreate("Hello World", 200, 100)
GUICtrlCreateLabel("Hello world! How are you?", 30, 10)
Local $iOKButton = GUICtrlCreateButton("OK", 70, 50, 60)
GUISetState(@SW_SHOW, $hGUI)

Local $iMsg = 0
$t = TimerInit()
For $i = 1 To 1000
   Switch GUIGetMsg()
      Case $iOKButton
         MsgBox($MB_SYSTEMMODAL, "GUI Event", "You selected the OK button.")
      Case $GUI_EVENT_CLOSE
         MsgBox($MB_SYSTEMMODAL, "GUI Event", "You selected the Close button. Exiting...")
         ExitLoop
      ;Case ...
   EndSwitch
Next
ConsoleWrite(TimerDiff($t) & @CRLF)

GUIDelete($hGUI)

Re: [..] Switch et variable

Posté : lun. 02 juil. 2018 14:35
par jpascal
C'est vrai que ce bon vieux TimerDiff() est toujours utile.

Puisqu'il n'y a pas de différence, je vais donc économiser deux lignes. :)

Merci orax pour ta réponse.

Re: [R] Switch et variable

Posté : mar. 03 juil. 2018 19:48
par mdanielm
Si le seul objectif est de réduire le nombre de lignes, il y a ça:
Do
   $iMsg = GUIGetMsg()
   if $iMsg = $iOKButton Then MsgBox($MB_SYSTEMMODAL, "GUI Event", "You selected the OK button.")
Until $iMsg = $GUI_EVENT_CLOSE
MsgBox($MB_SYSTEMMODAL, "GUI Event", "You selected the Close button. Exiting...")