Page 1 sur 1
[ Résolu ] Autre fonction que Delay()?....
Publié : dim. 02/nov./2008 18:38
par Necro
Bonjour à tous,
J'aimerais savoir s'il existe une autre fonction que delay pour attendre l'exécution d'une procédure ou d'un script par exemple...
Car delay bloque tout le programme et c'est génant si je veux faire par exemple :
Code : Tout sélectionner
AddGadgetItem(#maliste, -1, "objet 1")
delay(100)
AddGadgetItem(#maliste, -1, "objet 2")
delay(100)
AddGadgetItem(#maliste, -1, "objet 3")
Et bien quand je vais lancer le logiciel, il va se bloquer et m'afficher directement Objet 3.
Auriez-vous une autre fonction ou une astuce à me donner?
Publié : dim. 02/nov./2008 19:05
par Octavius
- Pour forcer l'affichage au fur et à mesure tu peux utiliser la fonction API WindowUpdate_(WindowID(#MaFenetre)) avant chaque Delay().
- Sinon si tu veux pouvoir faire d'autres opérations en même temps il va falloir utiliser des Threads.
Publié : dim. 02/nov./2008 19:20
par Necro
Comment on utilise ta fonction API s'il te plaît? ^^.....
Publié : dim. 02/nov./2008 19:21
par Anonyme
Bah oui , ta pas de rafraîchissement de ta fenêtre , donc c'est normal si tu voit directement l'objet n°3
Publié : dim. 02/nov./2008 19:24
par Necro
Sa me dit que c'est pas une fonction ou un array ou je sais plus quoi, en gros il reconnaît pas la fonction WindowUpdate_
Publié : dim. 02/nov./2008 19:31
par Anonyme
ta une démo de pb ?
Publié : dim. 02/nov./2008 19:32
par Necro
J'suis sous jaPBe
Publié : dim. 02/nov./2008 19:50
par Anonyme
Peut pas t'aider , je suis sous linux :/
Publié : dim. 02/nov./2008 20:08
par Necro
xD , ok merci quand même, mais j'ai utilisé les thread sa marche super bien!
Publié : dim. 02/nov./2008 23:06
par Ar-S
Ouai les thread servent à ça, par contre octavius, j'ai essayé l'API WindowUpdate_(WindowID(#fenetre)) et j'ai un WindowUpdate_ is not a function etc... bizarre ?
Publié : dim. 02/nov./2008 23:13
par Octavius
C'est ma faute, j'ai inversé en recopiant, c'est :
Publié : dim. 02/nov./2008 23:36
par Ar-S
Octavius a écrit :C'est ma faute, j'ai inversé en recopiant, c'est :
Effectivement, ça marche mieux..
Code : Tout sélectionner
Enumeration
#Window_0
#Button_0
#Button_3
#Button_4
EndEnumeration
Procedure OpenWindow_Window_0()
If OpenWindow(#Window_0, 618, 378, 266, 151, "Window_0", #PB_Window_SystemMenu|#PB_Window_TitleBar)
If CreateGadgetList(WindowID(#Window_0))
ButtonGadget(#Button_0, 0, 0, 265, 50, "Gadget_0")
Delay(1000)
EndIf
UpdateWindow_(WindowID(#Window_0))
If CreateGadgetList(WindowID(#Window_0))
ButtonGadget(#Button_3, 0, 50, 265, 50, "Gadget_1")
Delay(1000)
EndIf
UpdateWindow_(WindowID(#Window_0))
If CreateGadgetList(WindowID(#Window_0))
ButtonGadget(#Button_4, 0, 100, 265, 50, "Gadget_2")
Delay(1000)
EndIf
UpdateWindow_(WindowID(#Window_0))
EndIf
EndProcedure
OpenWindow_Window_0()
Repeat
Select WaitWindowEvent()
Case #PB_Event_CloseWindow
Select EventWindow()
Case #Window_0
CloseWindow(#Window_0)
Break
EndSelect
EndSelect
ForEver
necro si tu as géré ça avec les thread, tu pourrais montrer ton exemple ?
L'utilisation des threads restent cauchemardesque pour moi

Publié : lun. 03/nov./2008 9:40
par Necro
C'est très simple...
J'te montre (j'fais le fiero xD) :
Sa marche bien mon code mais je suis pas sûr que ce soit exactement sa qu'il faut mettre :
Tu crée ta procedure qui va être considérée comme une
Thread (En dehors de la boucle de l'Event)
Code : Tout sélectionner
Procedure affichermessage(n)
Repeat
MessageRequester("Info", "Se message va réapparaitre dans 5 secondes !")
Delay(5000)
Forever
EndProcedure
Maintenant tu crée ton THREAD en dehors de ta boucle des evenements :
Voilà, j'espère avoir pu t'aider :s
Publié : lun. 03/nov./2008 11:30
par Ar-S
Hihi merci de me donner cet exemple même s'il resemble à celui de la doc

ma question est :
Ton
CreateThread(@affichermessage(), 0)
- Le '0' c'est parceque c'est le 1er Thread ?
- Tu dis qu'il faut le mettre en dehaors de la boucle Event, mais alors comment l'appelles tu lorsque tu veux par exemple faire clignoter un message pendant que ton soft bosse.
Par exemple, le programme se met à copier un gros fichier, pendant ce temps, la fenêtre est "freezé" donc je veux qu'un "Please Wait" s'affiche pendant ce temps.
Faut-il mettre la procédure de copy en thread ou mon messagerequester.
Et comment l'appeler si le Creat est en dehors de la boucle.. ?
Blup je me noie
Publié : lun. 03/nov./2008 11:33
par Necro
xD, le "0" du CreateThread(@affichermessage(), 0) c'est le n de la procedure affichermessage().
Ensuite je sais pas si t'es forcé de le mettre hors de ta boucle j'ai jamais essayé, mais fais des tests, pour ce que tu m'a demandé je ne pense pas être en mesure de te repondre, je suis désolé :s, mais j'te dit : fais des tests, trafique un peu tout, et sa devrait aller xD
Cordialement,
Necro.