PureBasic

Forums PureBasic
Nous sommes le Mar 17/Sep/2019 17:43

Heures au format UTC + 1 heure




Poster un nouveau sujet Répondre au sujet  [ 9 messages ] 
Auteur Message
 Sujet du message: pb affichage textgadget sous windows 10
MessagePosté: Mer 29/Juin/2016 10:20 
Hors ligne

Inscription: Mar 01/Juil/2014 9:28
Messages: 12
Bonjour à tous,

Je travaille habituellement sous Linux Debian, j'ai un programme qui télécharge des fichiers sur un serveur de la NOAA
aux US le textgadget affiche l'état par exemple 10/180.
Cela fonctionne très bien sous linux, par contre sous windows l'affichage est figé si l'on clic la souris mais le programme se déroule bien.
Si l'on viens à cliquer sur la fenêtre du prog BP cela affiche que le programme ne répond pas.
Je n'ai pas ces problèmes sous linux..........
Merci de votre aide.
Bonne journée.


Haut
 Profil  
Répondre en citant le message  
 Sujet du message: Re: pb affichage textgadget sous windows 10
MessagePosté: Mer 29/Juin/2016 14:54 
Hors ligne
Avatar de l’utilisateur

Inscription: Dim 09/Oct/2005 16:51
Messages: 8750
Bonjour translucidus,
On veut bien tenter d'apporter de l'aide mais on est pas devin non plus.
Sans code, ça va pas être facile ? Quelle version de PB utilises tu ?

_________________
~~~~Règles du forum ~~~~
.: Ar-S :. Tour + portable W10 x64 PB 5.4x / 5.6x
LDV MULTIMEDIA : Dépannage informatique & mes Logiciels PB
RESIZER GOLD : Mon logiciel de redimensionnement par lot 100% PB


Haut
 Profil  
Répondre en citant le message  
 Sujet du message: Re: pb affichage textgadget sous windows 10
MessagePosté: Mer 29/Juin/2016 16:05 
Hors ligne

Inscription: Mar 01/Juil/2014 9:28
Messages: 12
Bonjour Ar-S,

Voici quelques lignes qui montre le PB si l'on clique avec la souris sur le bureau l'affichage se fige, ce
qui n'est pas le cas sous linux.

Code:
;Test affichage Textgadget dans une boucle
; 29/06/2016 DM
Define.w i , Nbt
#WindowWidth  = 350
#WindowHeight =180
If OpenWindow(0, 0, 0, #WindowWidth, #WindowHeight," TELECHARGEMENT GFS  NOAA " ,0)
  TextGadget(1, 70, 50,  220, 40, " Acquisition en cours :",#PB_Text_Border|#PB_Text_Center)         
  TextGadget(4, 80, 130,  200, 30, "CETTE FENETRE ",#PB_Text_Center)
  SetGadgetColor(4, #PB_Gadget_FrontColor, $FF00FF)
  TextGadget(5, 80, 150,  200, 30, "SE FERMERA A LA FIN DU TRAVAIL !!!",#PB_Text_Center)
  SetGadgetColor(5, #PB_Gadget_FrontColor, $FF0000)
  If LoadImage(0,"C:/METEO/Ballon/Data/ballon2.png")
    ButtonImageGadget(7, 0, 0, 70, 67, ImageID(0))
  EndIf
  Nbt = 180
  StickyWindow(0, #True)
  For i= 0 To nbt Step 3
    Afnb$=Str(i)+"/"+Str(Nbt)
    SetGadgetText(1, " Acquisition en cours : "+Afnb$)
    Select i
      Case 0 To 9
        id$="00"+Str(i)
        id2$="0"+Str(i)
      Case 10 To 99
        id$="0"+Str(i)
        id2$=Str(i)
      Case 100 To 200
        id$=Str(i)
        id2$=id$
    EndSelect
    Fichier$= Pth1$+"Gfs"+Hr2$+"_Europe.grb"
    ;urlok$=Chr(34)+"http://nomads.ncep.noaa.gov/cgi-bin/filter_gfs_0p25.pl?file=..................................
    cmd$="wget -nv -O "
    ;RunProgram (cmd$,Param$,"",#PB_Program_Wait|#PB_Program_Hide)
    Delay(500)
  Next i
EndIf
End


Merci


Haut
 Profil  
Répondre en citant le message  
 Sujet du message: Re: pb affichage textgadget sous windows 10
MessagePosté: Mer 29/Juin/2016 16:27 
Hors ligne

Inscription: Sam 08/Fév/2014 15:19
Messages: 1595
Bonjour translucidus,

Ton programme se fige car à aucun moment tu ne donne la main au gestionnaire d'évènement pour traiter ce que l'utilisateur peut entrer (ex: clic de souris). Du coup il sature le buffer et finit par planter.

Une rustine rapide consiste à mettre avant la ligne Delay(500) une ligne comme
Code:
While WaitWindowEvent() : Wend


Maintenant, idéalement il y aurait d'autres choses à mettre pour le rendre 'propre' c'est à dire qu'il puisse être interrompu par l'utilisateur (bouton stop, case de fermeture etc)
Delay n'est pas une instruction géniale dans une boucle avec beaucoup d'itérations, elle a vite fait de pomper du temps système.
Regarde aussi les fonctions LSet et Rset qui te permettent de formater facilement une chaine en complétant à droite et à gauche par un caractère au choix sans te préoccuper du nombre de caractères à utiliser.

Je viens de tester le code que tu as donné, sous Linux (Debian 8 avec xfce) et PB 5.42 LTS
Il n'affiche pas la progression (peut être que certaines libs me manquent) et plante aussi si on clique un certain nombre de fois
"Cette fenêtre ne répond pas : il se peut qu'elle soit occupée.
Voulez-vous fermer l'application ?"
Si on met le Delay à 50 au lieu de 500 il ne plante pas, mais c'est parce qu'il a fini avant de saturer le buffer souris

(dans les deux cas, j'avais désactivé le loadimage puisque n'ayant pas le fichier)

PS. Quand tu postes un code, sélectionne le bloc de texte puis cliques sur [Code]

:wink:

_________________
Windows 10 Famille x64 + Linux (Slackware, Debian sur Oracle VirtualBox 6.0)


Haut
 Profil  
Répondre en citant le message  
 Sujet du message: Re: pb affichage textgadget sous windows 10
MessagePosté: Mer 29/Juin/2016 17:07 
Hors ligne

Inscription: Mar 01/Juil/2014 9:28
Messages: 12
Merci Marc56 pour ta réponse rapide, dans mon programme je n'ai pas de Delay()
Je l'ai mis dans l' exemple pour que l'on puisse voir l'affichage.
Dans mon programme entre chaque boucle il y a environ 1 minute car les fichiers sont
Gros.
L'utilisateur ne doit surtout pas intervenir la fenêtre est là pour afficher l'avancement du
Téléchargement après l.acquisition mon programme fait beaucoup de calcul la fenêtre est close avant les calcul.
Tout cela marche parfaitement sous Debian8.3.


Haut
 Profil  
Répondre en citant le message  
 Sujet du message: Re: pb affichage textgadget sous windows 10
MessagePosté: Mer 29/Juin/2016 17:24 
Hors ligne

Inscription: Sam 08/Fév/2014 15:19
Messages: 1595
Ah, OK.

J'aurais tendance pour ce type de programme à utiliser un thread (autant s'en servir de nos jours puis qu'on a du multi-taches).
Faire tourner le traitement (chargement) en arrière plan et l'information (progression) au premier plan.
Ainsi tu n'auras aussi plus de sablier puisque la fenêtre d'info captera les évènements utilisateur.

Autre chose. Je vois que tu utilises wget. Tu pourrais utiliser avantageusement ReceiveHTTPFile() intégré à PB

:wink:

_________________
Windows 10 Famille x64 + Linux (Slackware, Debian sur Oracle VirtualBox 6.0)


Haut
 Profil  
Répondre en citant le message  
 Sujet du message: Re: pb affichage textgadget sous windows 10
MessagePosté: Mer 29/Juin/2016 17:29 
Hors ligne
Avatar de l’utilisateur

Inscription: Dim 09/Oct/2005 16:51
Messages: 8750
Je n'ai pas trop pigé ce que tu cherches à faire mais avec un timer ça peut être une solution pour l'incrémentation.
Code:
;Test affichage Textgadget dans une boucle
; 29/06/2016 DM
Define.w i , Nbt
#WindowWidth  = 350
#WindowHeight =180
If OpenWindow(0, 0, 0, #WindowWidth, #WindowHeight," TELECHARGEMENT GFS  NOAA " ,0)
  TextGadget(1, 70, 50,  220, 40, " Acquisition en cours :",#PB_Text_Border|#PB_Text_Center)         
  TextGadget(4, 80, 130,  200, 30, "CETTE FENETRE ",#PB_Text_Center)
  SetGadgetColor(4, #PB_Gadget_FrontColor, $FF00FF)
  TextGadget(5, 80, 150,  200, 30, "SE FERMERA A LA FIN DU TRAVAIL !!!",#PB_Text_Center)
  SetGadgetColor(5, #PB_Gadget_FrontColor, $FF0000)
  If LoadImage(0,"C:/METEO/Ballon/Data/ballon2.png")
    ButtonImageGadget(7, 0, 0, 70, 67, ImageID(0))
  EndIf
  Nbt = 180
  StickyWindow(0, #True)
 
  AddWindowTimer(0, 10, 500)
 
 
  Repeat
     Event = WaitWindowEvent()
     
     Select event
       Case #PB_Event_Timer
         
         Afnb$=Str(compte)+"/"+Str(Nbt)
         SetGadgetText(1, " Acquisition en cours : "+Afnb$)
         Select nbt
           Case 0 To 9
             id$="00"+Str(compte)
             id2$="0"+Str(compte)
           Case 10 To 99
             id$="0"+Str(compte)
             id2$=Str(compte)
           Case 100 To 200
             id$=Str(compte)
             id2$=id$
         EndSelect
         
         compte + 3
       
         
         Fichier$= Pth1$+"Gfs"+Hr2$+"_Europe.grb"
         ;urlok$=Chr(34)+"http://nomads.ncep.noaa.gov/cgi-bin/filter_gfs_0p25.pl?file=..................................
         cmd$="wget -nv -O "
         ;RunProgram (cmd$,Param$,"",#PB_Program_Wait|#PB_Program_Hide)
         
          If compte > 180
            RemoveWindowTimer(0, 10) 
            End
        EndIf
       
     EndSelect

   Until Event = #PB_Event_CloseWindow
   
   End
 
EndIf


Je rejoints Marc56 pour l'utilisation d'un thread pour ce qui est du chargement en arrière plan. Sauf si tes fichiers sont très légers

_________________
~~~~Règles du forum ~~~~
.: Ar-S :. Tour + portable W10 x64 PB 5.4x / 5.6x
LDV MULTIMEDIA : Dépannage informatique & mes Logiciels PB
RESIZER GOLD : Mon logiciel de redimensionnement par lot 100% PB


Haut
 Profil  
Répondre en citant le message  
 Sujet du message: Re: pb affichage textgadget sous windows 10
MessagePosté: Mer 29/Juin/2016 17:34 
Hors ligne

Inscription: Mer 14/Sep/2011 16:59
Messages: 904
Oui, le mieux, c'est d'utiliser un thread.
Il doit être possible de se passer d'un thread en utilisant un timer.

C'est un des rares exemples où on peut utiliser un "WindowEvent()" pour gérer les messages.
On peut utiliser "WaitWindowEvent(1)" la place de "WindowEvent()" mais il faut bien mettre un timer, ici j'ai mis 1ms sinon, la fenêtre ne se ferme qu'après un message windows, comme après avoir bouger la souris par exemple.

Code:
;Test affichage Textgadget dans une boucle
; 29/06/2016 DM
Define.w i , Nbt
#WindowWidth = 350
#WindowHeight =180

Global quit=0 ;<==================================== signal pour quitter

Procedure MaProcedureThread(*Valeur) ; <============== thread
  Nbt = 180
 
  For i= 0 To nbt Step 3
    Afnb$=Str(i)+"/"+Str(Nbt)
    SetGadgetText(1, " Acquisition en cours : "+Afnb$)
    Select i
      Case 0 To 9
        id$="00"+Str(i)
        id2$="0"+Str(i)
      Case 10 To 99
        id$="0"+Str(i)
        id2$=Str(i)
      Case 100 To 200
        id$=Str(i)
        id2$=id$
    EndSelect
    Fichier$= Pth1$+"Gfs"+Hr2$+"_Europe.grb"
    ;urlok$=Chr(34)+"http://nomads.ncep.noaa.gov/cgi-bin/filter_gfs_0p25.pl?file=..................................
    cmd$="wget -nv -O "
    ;RunProgram (cmd$,Param$,"",#PB_Program_Wait|#PB_Program_Hide)
    Delay(500)
  Next i; La variable '*Valeur' contiendra 23
  quit=1
EndProcedure


If OpenWindow(0, 0, 0, #WindowWidth, #WindowHeight," TELECHARGEMENT GFS NOAA " ,#PB_Window_Tool)
  SmartWindowRefresh(0, #True ) ; <========= pourquoi pas ;)
 
 
  TextGadget(1, 70, 50, 220, 40, " Acquisition en cours :",#PB_Text_Border|#PB_Text_Center)
  TextGadget(4, 80, 130, 200, 30, "CETTE FENETRE ",#PB_Text_Center)
  SetGadgetColor(4, #PB_Gadget_FrontColor, $FF00FF)
  TextGadget(5, 80, 150, 200, 30, "SE FERMERA A LA FIN DU TRAVAIL !!!",#PB_Text_Center)
  SetGadgetColor(5, #PB_Gadget_FrontColor, $FF0000)
  If LoadImage(0,"C:/METEO/Ballon/Data/ballon2.png")
    ButtonImageGadget(7, 0, 0, 70, 67, ImageID(0))
  EndIf
  StickyWindow(0, #True)
   
EndIf

monthread=CreateThread(@MaProcedureThread(), 0); <==========

If quit=1; <==========
  KillThread(monthread); <==========
  CloseWindow(0); <==========
EndIf; <==========

Repeat
  WindowEvent();WaitWindowEvent(1); <========== au choix
Until quit=1

End


Normalement, il faudrait activer l'option thread du compilateur, dans Compilateur\Option du compilateur, dans l'IDE. (bizarrement, ça marche sans...)

Mesa.


Haut
 Profil  
Répondre en citant le message  
 Sujet du message: Re: pb affichage textgadget sous windows 10
MessagePosté: Mer 29/Juin/2016 19:41 
Hors ligne

Inscription: Mar 01/Juil/2014 9:28
Messages: 12
Bonsoir,

Merci pour vos bons conseils, j'ai modifié ma programmation, avec un thread cela fonctionne bien.
J'ai l'habitude d'utiliser wget car je programme encore souvent en c et fortran qui est toujours utilisé dans
la programmation scientifique.

Bonne soirée à tous.


Haut
 Profil  
Répondre en citant le message  
Afficher les messages postés depuis:  Trier par  
Poster un nouveau sujet Répondre au sujet  [ 9 messages ] 

Heures au format UTC + 1 heure


Qui est en ligne

Utilisateurs parcourant ce forum: Aucun utilisateur enregistré et 1 invité


Vous ne pouvez pas poster de nouveaux sujets
Vous ne pouvez pas répondre aux sujets
Vous ne pouvez pas éditer vos messages
Vous ne pouvez pas supprimer vos messages

Rechercher:
Aller à:  

 


Powered by phpBB © 2008 phpBB Group | Traduction par: phpBB-fr.com
subSilver+ theme by Canver Software, sponsor Sanal Modifiye