IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

PureBasic Discussion :

purebasic runprogram( bloque la fenêtre principale


Sujet :

PureBasic

  1. #1
    Futur Membre du Club
    Profil pro
    Inscrit en
    Mars 2010
    Messages
    10
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2010
    Messages : 10
    Points : 6
    Points
    6
    Par défaut purebasic runprogram( bloque la fenêtre principale
    Bonjour à tous et merci pour ce forum d'entraide
    Je rencontre un petit souci de finalisation sur ce code qui fonctionne malgré tout

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    ElseIf GadgetID = #Button_3 
    .... code création de marius.bat
                           marius.s = "***marius.bat"
                           RunProgram(marius.s,"","",#PB_Program_Wait)
     
    SetGadgetState(#ProgressBar_0,40)
    ..... code création de paulo.bat
                            paulo.s = "paulo.bat"
                            RunProgram(paulo.s,"","",#PB_Program_Wait)  
    SetGadgetState(#ProgressBar_0,40)
    Avec ce code tout simple mon application fonctionne parfaitement mais ma fenetre 0 me sort un joli (ne répond pas) et la mise a jour de la barre de progression ne s'affiche pas entre les programmes

    Dommage car mon projet est un gui sensé automatiser l'exécution de 4 .bat successivement, sans que l'utilisateur n'ai besoin d'intervenir
    Si je sors de la boucle "event" entre chaque runprogram( , je récupère la main sur la fenêtre principale

    Je ne suis pas sûr d'avoir tout compris aux "events", j'ai essayé pas mal d'option de run program sans succès

    Ce que j'aimerai c'est désolidariser ma fenêtre de l'execution du .bat (procedure,thread ???)

    Comment faire, désolé pour mon piètre niveau malgré mon enthousiasme pour ce langage bien plus "fun" que le C

    Merci d'avance

  2. #2
    Responsable Purebasic

    Avatar de comtois
    Inscrit en
    Avril 2003
    Messages
    1 261
    Détails du profil
    Informations forums :
    Inscription : Avril 2003
    Messages : 1 261
    Points : 9 924
    Points
    9 924
    Billets dans le blog
    8
    Par défaut
    Je n'ai jamais utilisé les thread, mais par curiosité je viens de tester ceci, et ça semble fonctionner.
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
     
    OpenWindow(0, 100, 200, 195, 260, "PureBasic Window", #PB_Window_SystemMenu | #PB_Window_MinimizeGadget | #PB_Window_MaximizeGadget)
    ButtonGadget(0, 10,  10, 150, 20, "Calculatrice")
    ButtonGadget(1, 10,  40, 150, 20, "NotePad")
    Declare RunCalc(Val)
    Declare RunWrite(Val)
    Repeat
      Event = WaitWindowEvent()
      Select Event
      Case #PB_Event_CloseWindow
         Quit = 1
      Case #PB_Event_Gadget
        Select EventGadget()
          Case 0
            If IsThread(Thread) = 0
              Thread = CreateThread(@RunCalc(),50)
            EndIf
          Case 1
            If IsThread(Thread1) = 0
              Thread1 = CreateThread(@RunWrite(),50)
            EndIf
        EndSelect
      EndSelect       
    Until Quit = 1
     
    Procedure RunCalc(val)
      RunProgram("calc.exe","","",#PB_Program_Wait)
    EndProcedure  
    Procedure RunWrite(val)
      RunProgram("notepad.exe","","",#PB_Program_Wait)
    EndProcedure
    Vous souhaitez participer à la rubrique PureBasic (tutoriels, FAQ, sources) ? Contactez-moi par MP.

  3. #3
    Futur Membre du Club
    Profil pro
    Inscrit en
    Mars 2010
    Messages
    10
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2010
    Messages : 10
    Points : 6
    Points
    6
    Par défaut
    Merci pour la réponse éclair
    Je crois que j'ai compris, je teste ça ASAP

  4. #4
    Membre éprouvé

    Profil pro
    Inscrit en
    Mai 2005
    Messages
    279
    Détails du profil
    Informations personnelles :
    Âge : 39
    Localisation : France

    Informations forums :
    Inscription : Mai 2005
    Messages : 279
    Points : 1 179
    Points
    1 179
    Par défaut
    J'allais répondre la même réponse que Comtois. La technique à utiliser pour désolidariser des processus du programme principal est la technique des threads.

    Ainsi tu pourras en stopper un (via un KillThread) - au besoin- sans arrêter les autres, ou même en mettre un en pause (via un PauseThread) sans interférence entre les différents processus.

    Attention au cas où tu utiliserais des variables partagées entres les différents threads.
    Par exemple, une chaîne partagée entre deux threads avec un accès à la chaîne au même moment par les deux threads peut provoquer soit un crash du programme soit dans un thread la chaîne normale et dans l'autre thread, une chaîne vide.
    Dans ce cas, utilise soit une chaîne restreinte à la procédure via un "Protected myvar.s", soit un mutex pour bloquer l'accès à la variable(CreateMutex).

  5. #5
    Futur Membre du Club
    Profil pro
    Inscrit en
    Mars 2010
    Messages
    10
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2010
    Messages : 10
    Points : 6
    Points
    6
    Par défaut
    Merci a vous deux, ça marche au poil
    Pas besoin de mutex car je fais du séquentiel, par contre j'aimerai déclarer mes variables en global pour les utiliser dans les procédures, je vais regarder comment on fait mais j'ai cru apercevoir la déclaration threaded(

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Comment garder le processus en fermant la fenêtre principale ?
    Par [Silk] dans le forum Composants VCL
    Réponses: 7
    Dernier message: 26/07/2005, 00h16
  2. Masquer la fenêtre principale
    Par chleuh dans le forum Composants VCL
    Réponses: 2
    Dernier message: 20/06/2005, 17h54
  3. Fenêtre principale : createwindow ou DialogBox ?
    Par SteelBox dans le forum Windows
    Réponses: 6
    Dernier message: 02/09/2004, 22h26
  4. Réponses: 2
    Dernier message: 03/08/2004, 10h30
  5. Fenêtre principale et secondaire
    Par FranT dans le forum Composants VCL
    Réponses: 9
    Dernier message: 31/07/2002, 19h25

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo