PureBasic

Forums PureBasic
Nous sommes le Sam 25/Jan/2020 12:12

Heures au format UTC + 1 heure




Poster un nouveau sujet Répondre au sujet  [ 30 messages ]  Aller à la page Précédente  1, 2
Auteur Message
 Sujet du message: Re: Gestion events problème
MessagePosté: Ven 09/Sep/2016 9:29 
Hors ligne

Inscription: Sam 08/Fév/2014 15:19
Messages: 1681
(mon dernier raisonnement était faux, désolé)

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


Dernière édition par Marc56 le Ven 09/Sep/2016 12:23, édité 9 fois.

Haut
 Profil  
Répondre en citant le message  
 Sujet du message: Re: Gestion events problème
MessagePosté: Ven 09/Sep/2016 9:33 
Hors ligne
Avatar de l’utilisateur

Inscription: Dim 22/Aoû/2010 15:24
Messages: 6865
Localisation: IDF (Yvelines)
Citation:
dans l'absolu rien n'empeche le passage de plusieurs parametres a un Thread , mais faut alors ruser
Pas besoin de ruser : Tu passes un pointeur de structure.
:arrow: https://www.purebasic.com/french/docume ... hread.html

_________________

➽ Config PureBasic : i3, RAM 4Go, NVidia (1024 Mo), Windows 10 - PB 5.70 LTS
➽ Je papote aussi sur http://purebasic.chat

➽ Sites personnels http://falsam.com & EasySprite.js

➽ Je ne réponds pas aux MP techniques


Haut
 Profil  
Répondre en citant le message  
 Sujet du message: Re: Gestion events problème
MessagePosté: Ven 09/Sep/2016 13:13 
Hors ligne
Avatar de l’utilisateur

Inscription: Mar 31/Mai/2016 9:06
Messages: 2154
falsam a écrit:
Citation:
dans l'absolu rien n'empeche le passage de plusieurs parametres a un Thread , mais faut alors ruser
Pas besoin de ruser : Tu passes un pointeur de structure.


on va pas jouer sur la sémantique
par ruser j'entends "utiliser une methode non conventionnelle" , puisque par convention
une Procedure peut contenir plusieurs parametres

Procedure Toto (par1,par2,par3,par4 )

alors que le fait d'en faire un thread bloque cette façon de faire appel a la procedure de façon traditionnel , et oblige une utilisation
non "standard" , en passant par Structures, écriture sur disque, ou agglomération dans un bluffer ou chaine$ comme je le montre
cela reviens donc bien a "ruser" ..

je voulais aussi montrer que l'emploi des pointeurs n'est absolument pas une obligation

[reedit]
tu as toutefois bien fait de rappeler la Doc ;)
apres tout l'emploi d'une structure est quand meme plus souple que l'emploi d'une Chaine :lol:

_________________
Image
Image
Site: http://michel.dobro.free.fr/
Devise :"dis moi ce dont tu as besoin, je t'expliquerai comment t'en passer"


Haut
 Profil  
Répondre en citant le message  
 Sujet du message: Re: Gestion events problème
MessagePosté: Dim 11/Sep/2016 17:11 
Hors ligne

Inscription: Ven 29/Juin/2007 17:50
Messages: 3529
Ici, on choisit l'IP, on starte le ping-test, on le stoppe et peut remettre à 0 l'affichage (EditorGdt).
On peut s'emmêler les pinceaux, ça marchera encore.
Code:
Global Prog

Procedure Start()
        If Prog = 0
                Prog = RunProgram("Ping", IPString(GetGadgetState(100) ) + " -n 100", "", #PB_Program_Hide | #PB_Program_Open | #PB_Program_Read)
        EndIf
EndProcedure

Procedure Stop()
        If Prog
                KillProgram(Prog)
                Prog = 0
        EndIf
EndProcedure

Procedure Reset()
        ClearGadgetItems(2)
EndProcedure

Macro Button(bn, bx, by, bw, bh, bproc, btext, bwind = 1)
        ButtonGadget(bn, bx, by, bw, bh, btext)
        BindEvent(#PB_Event_Gadget, bproc, bwind, bn)
EndMacro

OpenWindow(1, 128, 128, 640, 480, "Ping test")
IPAddressGadget(100, 20, 20, 160, 20)
SetGadgetState(100, MakeIPAddress(127, 0, 0, 1) )
EditorGadget(2, 20, 60, 600, 240, #PB_Editor_ReadOnly)
Button(3, 20, 400, 64, 24, @Start(), "Start")
Button(4, 120, 400, 64, 24, @Stop(), "Stop")
Button(5, 220, 400, 64, 24, @Reset(), "RàZ")
Repeat
        If Prog
                Size = AvailableProgramOutput(Prog)
                If Size
                        *Buff = ReAllocateMemory(*Buff, Size + 1)
                        Size = ReadProgramData(Prog, *Buff, Size)
                        AddGadgetItem(2, -1, PeekS(*Buff, Size - 2, Mode) )
                EndIf
        EndIf
Until WaitWindowEvent(16) = #PB_Event_CloseWindow
Stop()


Haut
 Profil  
Répondre en citant le message  
 Sujet du message: Re: Gestion events problème
MessagePosté: Lun 12/Sep/2016 7:23 
Hors ligne

Inscription: Sam 08/Fév/2014 15:19
Messages: 1681
PB 5.50 x64 / Win 10 x64:

F5
Start
Code:
Attente du démarrage du programme...
Type d'exécutable: Windows - x64  (64bit, Unicode)
Exécutable démarré.
[ERREUR] Ligne: 5
[ERREUR] InitNetwork() doit être appelée avec succès avant l'utilisation des commandes Network.

Débogeur > Arrêter le programme :roll:
InitNetwork() ajouté

F5
Start
Code:
Attente du démarrage du programme...
Type d'exécutable: Windows - x64  (64bit, Unicode)
Exécutable démarré.
[ERREUR] Ligne: 40
[ERREUR] PeekS(): valeur non valide pour le paramètre 'Flags'

Débogeur > Arrêter le programme :roll:

CTRL + W
N


Haut
 Profil  
Répondre en citant le message  
 Sujet du message: Re: Gestion events problème
MessagePosté: Lun 12/Sep/2016 7:36 
Hors ligne
Avatar de l’utilisateur

Inscription: Mar 31/Mai/2016 9:06
Messages: 2154
:lol: :)

_________________
Image
Image
Site: http://michel.dobro.free.fr/
Devise :"dis moi ce dont tu as besoin, je t'expliquerai comment t'en passer"


Haut
 Profil  
Répondre en citant le message  
 Sujet du message: Re: Gestion events problème
MessagePosté: Lun 12/Sep/2016 11:25 
Hors ligne

Inscription: Ven 29/Juin/2007 17:50
Messages: 3529
@Marc56

A part les discours hilarants, ça marche?!?


Haut
 Profil  
Répondre en citant le message  
 Sujet du message: Re: Gestion events problème
MessagePosté: Lun 12/Sep/2016 11:48 
Hors ligne

Inscription: Ven 29/Juin/2007 17:50
Messages: 3529
Je voudrais bien t'y voir pondre un code comme à partir d'un SmartPhone! Ça ira malgré les accents?
Code:
CompilerIf #PB_Compiler_Version > 522
      InitNetwork()
CompilerEndIf
Global Prog
Procedure Start()
      If Prog = 0
           Prog = RunProgram("Ping", IPString(GetGadgetState(100) ) + " -n 100", "", #PB_Program_Hide | #PB_Program_Open | #PB_Program_Read)
      EndIf
EndProcedure
Procedure Stop()
      If Prog
           KillProgram(Prog)
           Prog = 0
      EndIf
EndProcedure
Procedure Reset()
      ClearGadgetItems(2)
EndProcedure
Macro Button(bn, bx, by, bw, bh, bproc, btext, bwind = 1)
      ButtonGadget(bn, bx, by, bw, bh, btext)
      BindEvent(#PB_Event_Gadget, bproc, bwind, bn)
EndMacro
OpenWindow(1, 128, 128, 640, 480, "Ping test")
IPAddressGadget(100, 20, 20, 160, 20)
SetGadgetState(100, MakeIPAddress(127, 0, 0, 1) )
EditorGadget(2, 20, 60, 600, 240, #PB_Editor_ReadOnly)
Button(3, 20, 400, 64, 24, @Start(), "Start")
Button(4, 120, 400, 64, 24, @Stop(), "Stop")
Button(5, 220, 400, 64, 24, @Reset(), "RàZ")
Repeat
      If Prog
           Size = AvailableProgramOutput(Prog)
           If Size
                *Buff = ReAllocateMemory(*Buff, Size + 1)
                Size = ReadProgramData(Prog, *Buff, Size)
                AddGadgetItem(2, -1, PeekS(*Buff, Size - 2) )
           EndIf
      EndIf
Until WaitWindowEvent(16) = #PB_Event_CloseWindow
Stop()


Haut
 Profil  
Répondre en citant le message  
 Sujet du message: Re: Gestion events problème
MessagePosté: Lun 12/Sep/2016 11:52 
Hors ligne

Inscription: Sam 08/Fév/2014 15:19
Messages: 1681
Ollivier a écrit:
A part les discours hilarants, ça marche?!?
NON (C'est bien pour ça que j'avais pris la peine de copier les messages d'erreur.)

Par contre le dernier que tu viens de mettre fonctionne :)
(mis à par les caractères retournés qui n'ont pas de problème d'accents mais semblent en chinois) (PB 5.50)

Ollivier a écrit:
Je voudrais bien t'y voir pondre un code comme à partir d'un SmartPhone!
Mais quelle drôle d'idée ????

Merci (à tous) de tester complètement les codes avant de poster :roll:

Le Stop() à la fin qui renvoie vers KillProgram ne sert à rien puisque dixit la doc, tous les threads sont killés à la fin du programme.

PS. Il y a par contre un concept intéressant avec la macro :idea:
:arrow: (mais ça ne rends pas plus clair l'utilisation et le debug)


Haut
 Profil  
Répondre en citant le message  
 Sujet du message: Re: Gestion events problème
MessagePosté: Lun 12/Sep/2016 12:12 
Hors ligne

Inscription: Ven 29/Juin/2007 17:50
Messages: 3529
Pour le Stop(), il est très bien là où il est, ce serait une grave erreur de le sauter là.

Prière de m'indiquer ton nouveau problème et d'émettre éventuellement une suggestion.


Haut
 Profil  
Répondre en citant le message  
 Sujet du message: Re: Gestion events problème
MessagePosté: Lun 12/Sep/2016 12:17 
Hors ligne

Inscription: Sam 08/Fév/2014 15:19
Messages: 1681
Ollivier a écrit:
Pour le Stop(), il est très bien là où il est, ce serait une grave erreur de le sauter là.

Prière de m'indiquer ton nouveau problème et d'émettre éventuellement une suggestion.


Erreur: PB 5.50 est unicode par défaut et la commande ping retourne une chaine ansi.
Image

Suggestion: Ajouter #PB_Ascii:
Code:
AddGadgetItem(2, -1, PeekS(*Buff, Size - 2, #PB_Ascii))

C'est moins pire, car on ne perd alors que les accents.
Image

Suggestion 2: Remplacer les accents ou n'afficher que la partie de la chaine sans accents (après tout on se fiche du "réponse de") seuls les chiffres sont intéressants.
Code:
Repeat
    If Prog
        Size = AvailableProgramOutput(Prog)
        If Size
            *Buff = ReAllocateMemory(*Buff, Size + 1)
            Size = ReadProgramData(Prog, *Buff, Size)
            PingString$ = PeekS(*Buff, Size - 2, #PB_Ascii)
            Ping$       = StringField(PingString$, 4 , " ") + " - " +
                          StringField(PingString$, 5 , " ") + " - " +
                          StringField(PingString$, 6 , " ")               
            AddGadgetItem(2, -1, Ping$)
        EndIf
    EndIf
Until WaitWindowEvent(16) = #PB_Event_CloseWindow


Image


Haut
 Profil  
Répondre en citant le message  
 Sujet du message: Re: Gestion events problème
MessagePosté: Lun 12/Sep/2016 22:47 
Hors ligne

Inscription: Ven 29/Juin/2007 17:50
Messages: 3529
Marc56 a écrit:
Suggestion 2: Remplacer les accents ou n'afficher que la partie de la chaine sans accents (après tout on se fiche du "réponse de") seuls les
chiffres sont intéressants.


(Je pense a fortiori que la problème 1er de jmg49 est
résolu.)

Si tu remplaces PeekS() par PeekANSI() dispo ici, tu auras les accents avec ton programme en mode Unicode.

Aussi, voici une fonction Digit() qui t'extrait le Nième nombre entier de base décimale (puisque tu dis que seuls les chiffres sont intéressants). Dispo ici.


Haut
 Profil  
Répondre en citant le message  
 Sujet du message: Re: Gestion events problème
MessagePosté: Mar 13/Sep/2016 9:34 
Hors ligne
Avatar de l’utilisateur

Inscription: Dim 22/Aoû/2010 15:24
Messages: 6865
Localisation: IDF (Yvelines)
Ollivier a écrit:
Je voudrais bien t'y voir pondre un code comme à partir d'un SmartPhone! Ça ira malgré les accents?
Configure ton téléphone en point d’accès Wifi et tu pourras accéder au forum depuis ton pc (Si Wifi disponible sur ton pc) :wink:

_________________

➽ Config PureBasic : i3, RAM 4Go, NVidia (1024 Mo), Windows 10 - PB 5.70 LTS
➽ Je papote aussi sur http://purebasic.chat

➽ Sites personnels http://falsam.com & EasySprite.js

➽ Je ne réponds pas aux MP techniques


Haut
 Profil  
Répondre en citant le message  
 Sujet du message: Re: Gestion events problème
MessagePosté: Mar 13/Sep/2016 15:18 
Hors ligne

Inscription: Sam 08/Fév/2014 15:19
Messages: 1681
Sur la base de la version d'Ollivier, une version avec découpe à l'aide d'une expression régulière, dépose en colonnes et possibilité de changer l'IP
Code:
EnableExplicit

CompilerIf #PB_Compiler_Version > 522
    InitNetwork()
CompilerEndIf

Global Prog

Procedure Start()
    If Prog = 0
        Prog = RunProgram("Ping", IPString(GetGadgetState(100) ) + " -n 100", "",
                          #PB_Program_Hide | #PB_Program_Open | #PB_Program_Read)
    EndIf
EndProcedure

Procedure Stop()
    If Prog
        KillProgram(Prog)
        Prog = 0
    EndIf
EndProcedure

Procedure Reset()
    ClearGadgetItems(2)
EndProcedure

Macro Button(bn, bx, by, bw, bh, bproc, btext, bwind = 1)
    ButtonGadget(bn, bx, by, bw, bh, btext)
    BindEvent(#PB_Event_Gadget, bproc, bwind, bn)
EndMacro

OpenWindow(1, 128, 128, 640, 480, "Ping test")
IPAddressGadget(100, 20, 20, 160, 20)

SetGadgetState(100, MakeIPAddress(127, 0, 0, 1)) ; (test)
SetGadgetState(100, MakeIPAddress(IPAddressField(GetGadgetState(100), 0),
                                  IPAddressField(GetGadgetState(100), 1),
                                  IPAddressField(GetGadgetState(100), 2),
                                  IPAddressField(GetGadgetState(100), 3)))

ListIconGadget(2, 20, 60, 600, 240, "Destination", 146)
AddGadgetColumn(2, 1, "Octets", 150)
AddGadgetColumn(2, 2, "Temps", 150)
AddGadgetColumn(2, 3, "TTL",   150)

Button(3,  20, 400, 64, 24, @Start(), "Start")
Button(4, 120, 400, 64, 24, @Stop(),  "Stop")
Button(5, 220, 400, 64, 24, @Reset(), "RàZ")

Enumeration
    #RegEx
EndEnumeration

If CreateRegularExpression(#RegEx, "((?:\d{1,3}\.){1,3}\d{1,3}).+s=(\d+).+(\d+)[ ]?ms.+TTL=(\d+)")
    ; Debug "RegEx OK"
Else
    Debug "RegEx KO"
    End
EndIf

Define Size
Define Ping$
Define *Buff
Define PingString$

Repeat
    If Prog
        Size = AvailableProgramOutput(Prog)
        If Size
            Ping$ = ""
            *Buff = ReAllocateMemory(*Buff, Size + 1)
            Size = ReadProgramData(Prog, *Buff, Size)
            PingString$ = PeekS(*Buff, Size - 2, #PB_Ascii)
           
            If MatchRegularExpression(#RegEx, PingString$)
                ExamineRegularExpression(#RegEx, PingString$)
                While NextRegularExpressionMatch(#RegEx)
                    AddGadgetItem(2, -1, RegularExpressionGroup(#RegEx, 1) + Chr(10) +
                                         RegularExpressionGroup(#RegEx, 2) + Chr(10) +
                                         RegularExpressionGroup(#RegEx, 3) + Chr(10) +
                                         RegularExpressionGroup(#RegEx, 4) + Chr(10) )
                Wend   
            Else
                AddGadgetItem(2, -1, "-")
            EndIf
        EndIf
    EndIf
Until WaitWindowEvent(16) = #PB_Event_CloseWindow

FreeRegularExpression(#RegEx)
End


L'expression régulière est faite à l'arrache, sans utiliser l'un des nombreux exemples existants.
À améliorer, notamment en cas d'absence de réponse serveur.
8)

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


Haut
 Profil  
Répondre en citant le message  
 Sujet du message: Re: Gestion events problème
MessagePosté: Mer 14/Sep/2016 14:50 
Hors ligne

Inscription: Mer 26/Fév/2014 8:53
Messages: 144
et bien merci beaucoup pour toutes vos explication et exemples !

_________________
- IBM Certified System Administrator IBM i V7R2
- IBM Certified Technical Sales Specialist Power Systems with POWER8
- IBM Certified Technical Sales Specialist Power Systems with POWER7

Amstrad CPC464 64KO + Multiface2


Haut
 Profil  
Répondre en citant le message  
Afficher les messages postés depuis:  Trier par  
Poster un nouveau sujet Répondre au sujet  [ 30 messages ]  Aller à la page Précédente  1, 2

Heures au format UTC + 1 heure


Qui est en ligne

Utilisateurs parcourant ce forum: tatanas et 4 invités


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