besoin d'aide
Bon sinon moi aussi j'ai un petit problème :
j'ai 2 thread, l'un gérant un serveur, l'autre permettant la maj d'un serveur distant.
Et j'ai une boucle repeat / forever avec un Sleep_(10000) dedans.
Mon programme bouffe plus de 50% de ma mémoire !
Ma question est la suivante : y a t - il une api permettant de rendre la main à l'OS quand on est dans une boucle ou un moyen de minimiser l'utilisation de ma mémoire ?
j'ai 2 thread, l'un gérant un serveur, l'autre permettant la maj d'un serveur distant.
Et j'ai une boucle repeat / forever avec un Sleep_(10000) dedans.
Mon programme bouffe plus de 50% de ma mémoire !
Ma question est la suivante : y a t - il une api permettant de rendre la main à l'OS quand on est dans une boucle ou un moyen de minimiser l'utilisation de ma mémoire ?
Code : Tout sélectionner
; /* Liste chainée récupérant tous les parametres */
NewList Param.s()
param.s = ProgramParameter()
While param <> ""
AddElement(Param()) : Param() = param
param = ProgramParameter()
Wend
; /* Demande un mot de passe */
pass.s = InputRequester("Identification", "Veuillez entrer un MDP pour entre dans le programme...", "")
If pass = "mot2pass"
MessageRequester("","Code Bon")
Else
MessageRequester("", "Code Erroné...")
End
EndIf
; /* il faut ensuite que tu lances l'ouverture du fichier */
ForEach Param()
args.s = args.s + Param()
Next
RunProgram("programme Bastien.exe", args, "")

Tu peux le faire mais tu dois créer une fenetre (grâce à la fonction OpenWindow(...)) et ajouter un StringGadget(..)
Ensuite il te faudra "gérer" la fenêtre, les évènements, les messages, etc...
Le programme va légèrement se compliquer... si t'es motivé, il te reste plus qu'à te farcir le manuel (fort bien fait d'ailleurs !)
Ensuite il te faudra "gérer" la fenêtre, les évènements, les messages, etc...
Le programme va légèrement se compliquer... si t'es motivé, il te reste plus qu'à te farcir le manuel (fort bien fait d'ailleurs !)
Bon, voila un petit bout de code qui devrait t'aider un peu...
Ne croit pas que ce sera comme ca à chaque fois par contre !
Ne croit pas que ce sera comme ca à chaque fois par contre !
Code : Tout sélectionner
;- Window Constants
Enumeration
#Window_0
EndEnumeration
;- Gadget Constants
;
Enumeration
#Text_0
#String_0
#Button_0
#Button_1
EndEnumeration
; /* Fonction retournant une chaine de caractere
; * Elle prend en parametre le titre de la fenetre et le texte a afficher (sur 1 ligne)
Procedure.s PasswordWindow(titre.s, text.s)
; /* Variable prévue pour le retour de la fonction
ret.s = ""
; /* créé une fenetre */
If OpenWindow(#Window_0, 401, 343, 331, 140, #PB_Window_SystemMenu | #PB_Window_SizeGadget | #PB_Window_TitleBar | #PB_Window_ScreenCentered , titre)
; /* créé une liste d'objet graphique sur la fenetre en cours (celle kon vient de créer) */
If CreateGadgetList(WindowID())
; /* Ajoute un objet texte (affichage)*/
TextGadget(#Text_0, 20, 20, 290, 25, text, #PB_Text_Center)
; /* ajoute un objet texte (entrée d'informations) avec option password */
StringGadget(#String_0, 65, 55, 200, 20, "", #PB_String_Password)
; /* Ajoute deux boutons */
ButtonGadget(#Button_0, 20, 100, 120, 25, "Ok")
ButtonGadget(#Button_1, 180, 100, 120, 25, "Annuler")
EndIf
EndIf
; /* c'est dans cette boucle (repeat/until) qu'on gère les évenements de la fenetre */
; /* La variable stop est utilisee pour quitter la boucle */
stop = 0
; /* Et c'est parti ! */
Repeat
; /* Fonction renvoyant le numero de l'evenement qui vient de se produire */
event = WaitWindowEvent()
; /* Structure conditionnelle (select/case) : on teste la variable event */
Select event
Case #PB_Event_CloseWindow ; /* on clik sur la croix : on quitte */
stop = 1
Case #PB_Event_Gadget ; /* Un gadget a été cliké */
Select EventGadgetID() ; /* Lequel ? */
Case #Button_0 ; /* Le #bouton_0 (Ok)
ret = GetGadgetText(#String_0) ;/* on retourne les infos contenus dans le #String_0 (le password) */
stop = 1 ; /* on quitte la boucle */
Case #Button_1 ;/* bouton annuler : on quitte */
stop = 1
EndSelect
EndSelect
Until stop = 1 ; /* Teste d'arret de la boucle (repeat/until)
ProcedureReturn ret ;/* on renvoi ici le resultat de la fonction */
EndProcedure ;// fin de la procedure
; /* on appelle ici la fonction PasswordWindow
; * le resultat est mis dans la variable pass */
pass.s = PasswordWindow("Password requis", "Veuillez entrer un password afin d'accéder aux inforamtions")
; /* Fenetre surgissante renvoyant les infos contenues dans pass */
MessageRequester("pass contient : ", pass)