PureBasic

Forums PureBasic
Nous sommes le Mer 16/Oct/2019 9:05

Heures au format UTC + 1 heure




Poster un nouveau sujet Répondre au sujet  [ 7 messages ] 
Auteur Message
 Sujet du message: Bug avec les Threads !!
MessagePosté: Ven 15/Aoû/2008 18:37 
Hors ligne
Avatar de l’utilisateur

Inscription: Mer 25/Juil/2007 0:13
Messages: 466
Bonjour,
Pour faire bref, voici deux exemples qui montrent le bug : :?
Avec le Bug :
Code:

Enumeration 100
  #Window
EndEnumeration

;
Enumeration 100
  #Button_0k
  #Button_1k
EndEnumeration

Procedure Open_Window()
  If OpenWindow(#Window, 291, 106, 417, 192, "test",  #PB_Window_SystemMenu | #PB_Window_SizeGadget | #PB_Window_TitleBar )
    If CreateGadgetList(WindowID(#Window))
      ButtonGadget(#Button_0k, 60, 120, 120, 30, "B1")
      ButtonGadget(#Button_1k,320, 100, 80, 70, "B2")

     
    EndIf
  EndIf
EndProcedure


Procedure test(*vkeyeur)

Open_Window()
 
Repeat
Delay(10)
evenk.l = WindowEvent()
If evenk = #PB_Event_Gadget
  Select EventGadget()

        Case #Button_1k
             Goto exikeyey:

        Case #Button_0k
             Goto exikeyey:
  EndSelect
EndIf

Until evenk = #PB_Event_CloseWindow
exikeyey:
CloseWindow(#Window)

EndProcedure


CreateThread(@test(),1)

Repeat


ForEver


Sans le Bug :
Code:

Enumeration 100
  #Window
EndEnumeration

;
Enumeration 100
  #Button_0k
  #Button_1k
EndEnumeration

Procedure Open_Window()
  If OpenWindow(#Window, 291, 106, 417, 192, "test",  #PB_Window_SystemMenu | #PB_Window_SizeGadget | #PB_Window_TitleBar )
    If CreateGadgetList(WindowID(#Window))
      ButtonGadget(#Button_0k, 60, 120, 120, 30, "B1")
      ButtonGadget(#Button_1k,320, 100, 80, 70, "B2")

     
    EndIf
  EndIf
EndProcedure


Procedure test(*vkeyeur)

Open_Window()
 
Repeat
Delay(10)
evenk.l = WindowEvent()
If evenk = #PB_Event_Gadget
  Select EventGadget()

        Case #Button_1k
             evenk = #PB_Event_CloseWindow

        Case #Button_0k
             evenk = #PB_Event_CloseWindow
  EndSelect
EndIf

Until evenk = #PB_Event_CloseWindow
exikeyey:
CloseWindow(#Window)

EndProcedure


CreateThread(@test(),1)

Repeat


ForEver

:idea: :?: :!:


Haut
 Profil  
Répondre en citant le message  
 Sujet du message:
MessagePosté: Sam 16/Aoû/2008 12:19 
Hors ligne
Avatar de l’utilisateur

Inscription: Jeu 25/Mar/2004 11:23
Messages: 1500
Localisation: Sophia Antipolis (Nice)
Oué c'est bizarre, on dirait que les Goto faire sortir le Thread de son contexte. Pourtant j'ai vérifié avec un GetCurrentThreadId_() et c'ets toujours bien le même Thread qui exécute le code dans la fonction.

Avec Debugger actvé et en faisait un Debug "bidule", le programme plante à la ligne "EndProcedure" avec un message : "Exécutable terminé".

Du moins, il y a bug quand on clic sur un bouton, mais quand on clic sur "Quitter", ca marche normalement...

Vraiment bizarre
/Lio

_________________
Webmestre de Basic-univers
Participez à son extension: ajouter vos programmes et partagez vos codes !


Haut
 Profil  
Répondre en citant le message  
 Sujet du message:
MessagePosté: Sam 16/Aoû/2008 12:25 
met des break à la place des goto.


Haut
  
Répondre en citant le message  
 Sujet du message:
MessagePosté: Sam 16/Aoû/2008 16:04 
Hors ligne
Avatar de l’utilisateur

Inscription: Mer 25/Juil/2007 0:13
Messages: 466
Avec le X le programme quitte avec un evenk = #PB_Event_CloseWindow et non pas avec un Goto !
Je sais qu’on peut utiliser un break , mais le but ici c’est de montrer le bug , et c’est assez gênant comme bug je trouve !

La réponse se trouve du coté assembleur !
:?


Haut
 Profil  
Répondre en citant le message  
 Sujet du message:
MessagePosté: Sam 16/Aoû/2008 16:27 
Hors ligne
Avatar de l’utilisateur

Inscription: Mar 06/Avr/2004 10:35
Messages: 1500
Essayes comme ça, chez moi ça fonctionne
Code:
Enumeration ;100
  #Window
;EndEnumeration

;
;Enumeration 100
  #Button_0k
  #Button_1k
EndEnumeration

Procedure Open_Window()
  If OpenWindow(#Window, 291, 106, 417, 192, "test",  #PB_Window_SystemMenu | #PB_Window_SizeGadget | #PB_Window_TitleBar )
    If CreateGadgetList(WindowID(#Window))
      ButtonGadget(#Button_0k, 60, 120, 120, 30, "B1")
      ButtonGadget(#Button_1k,320, 100, 80, 70, "B2")
 
     
    EndIf
  EndIf
EndProcedure


Procedure test(vkeyeur.l)

Open_Window()
 
Repeat
Delay(10)
evenk.l = WindowEvent()
If evenk = #PB_Event_Gadget
  Select EventGadget()

        Case #Button_1k
             Goto exikeyey
 
        Case #Button_0k
             Goto exikeyey
  EndSelect
EndIf

Until evenk = #PB_Event_CloseWindow
exikeyey:
CloseWindow(#Window)
End
EndProcedure


CreateThread(@test(),1)

Repeat


ForEver

_________________
Quand tous les glands seront tombés, les feuilles dispersées, la vigueur retombée... Dans la morne solitude, ancré au coeur de ses racines, c'est de sa force maturité qu'il renaîtra en pleine magnificence...Jacobus.


Haut
 Profil  
Répondre en citant le message  
 Sujet du message:
MessagePosté: Sam 16/Aoû/2008 16:39 
Hors ligne
Avatar de l’utilisateur

Inscription: Mer 25/Juil/2007 0:13
Messages: 466
C’est sure que ça va marcher comme ça ! Vu que le END arrête l’exécution du programme en entier, et non pas le thread seulement. :roll:


Haut
 Profil  
Répondre en citant le message  
 Sujet du message:
MessagePosté: Sam 16/Aoû/2008 16:44 
Hors ligne
Avatar de l’utilisateur

Inscription: Mar 06/Avr/2004 10:35
Messages: 1500
Oui mais sinon j'ai un message d'erreur "invalid memory access" sur repeat ou forever, normal il n'y a rien.
Ok, ça déconne même dans un programme plus complet. Pourtant j'utilise des Goto dans des Threads sans problème (threads sans ouverture de fenêtre).

_________________
Quand tous les glands seront tombés, les feuilles dispersées, la vigueur retombée... Dans la morne solitude, ancré au coeur de ses racines, c'est de sa force maturité qu'il renaîtra en pleine magnificence...Jacobus.


Haut
 Profil  
Répondre en citant le message  
Afficher les messages postés depuis:  Trier par  
Poster un nouveau sujet Répondre au sujet  [ 7 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