Il est où le problème avec ce code ?

Vous débutez et vous avez besoin d'aide ? N'hésitez pas à poser vos questions
Ollivier
Messages : 4197
Inscription : ven. 29/juin/2007 17:50
Localisation : Encore ?
Contact :

Il est où le problème avec ce code ?

Message par Ollivier »

Salut !

brossden évoquait un virus. Bien que je doute, ça me laisse perplexe.

Ce code exécuté se quitte avec la touche [Echap].

Je trifouillait les divers sources et je reteste celui-là que j'avais abandonné il y a 1 ou 2 mois, suite à un comportement complètement hallucinant.

Et là, même délire ! Ce code me provoque un truc de psychopathe !

Je suis en version pureBasic démo 5.73 LTS X64. Le source a été déplacé (changement de répertoire) : même effet.
Je suis sous Windows 10 sans réseau.

Ce code fonctionnait bien, puis soudain, sans que j'ai pu isoler les causes, il me fait le truc de fada suivant :

J'appuie sur F5. Dès que je veux bouger la souris, le curseur système de la souris apparait sur l'icône du réseau de la barre des tâches de W10. La bulle pop up de W10 s'affiche (<< Non connecté - La communication sans fil est désactivée. >>) Je bouge physiquement la souris (pour retourner par exemple appuyer sur la croix du KillProgram de l'IDE de pureBasic, mais, et c'est là que j'hallucine : le curseur de la souris "frétille" sur l'icône de réseau dans la barre des tâches !!! Je vous le jure !!! Impossible de bouger la souris de cet endroit !! Le délire s'arrête en appuyant sur [Echap] comme programmé dans ce code, et là, retour complet à la normale. Aucun problème de ressource CPU, rien, que dalle !!! Et c'est CE programme, ce programme-là qui n'a rien à voir avec le réseau !

Aidez-moi les gars ! Dites-moi que vous savez quelle paire de glaouïes j'ai, complètement par mégarde, saigné dans le code suivant pour déclencher un tel délire que je n'arrive absolument pas à analyser ou reproduire.

Avant de tester ce code avec F5, surtout, coupez votre réseau ! ! ! (Ce n'est pas un canular)

Code : Tout sélectionner

Global *screen
Global *keyboard
Global *mouse

Structure screen
    w.I
    h.I
EndStructure

Procedure screenCreate(windowed.I = 0, window.I = -1)
    Define *this.screen = AllocateMemory(SizeOf(screen) )
    With *this
        InitSprite()
        InitKeyboard()
        InitMouse()
        If windowed
            \w = WindowWidth(window)
            \h = WindowHeight(window)
            OpenWindowedScreen(WindowID(window), 0, 0, \w, \h)
        Else
        ExamineDesktops()
        \w = DesktopWidth(0)
        \h = DesktopHeight(0)
        OpenScreen(\w, \h, 32, "", #PB_Screen_SmartSynchronization)
        EndIf
    EndWith
    *screen = *this
EndProcedure



Structure mouse
    sprite.I
EndStructure

Procedure mouseCreate()
    Define *this.mouse = AllocateMemory(SizeOf(mouse) )
    With *this
        \sprite = CreateSprite(#PB_Any, 16, 16)
        If StartDrawing(SpriteOutput(\sprite) )
            w = OutputWidth()
            h = OutputHeight()
            Box(0, 0, w, h, RGB(0, 0, 0) )
            Box(1, 1, w - 2, h - 2, RGB(255, 255, 255) )
            StopDrawing()
        EndIf
        TransformSprite(\sprite, 0, 0, 23, 23, 15, 23, 0, 31)
    EndWith
    *mouse = *this
EndProcedure



Structure main
    Array sp.I(255)
    Array spW.I(255)
    Array spH.I(255)
EndStructure

Structure textSprite
    Spr.I
    X.I
    Y.I
    W.I
    H.I
    C1.I
    C0.I
    Alig.I
EndStructure

Global NewMap TextSprite.textSprite()

Procedure TextDraw(X, Y, W, H, Text.S, C1, C0, Alig = 1)
    KeyPtr = FindMapElement(TextSprite(), Text)
    If KeyPtr
        With TextSprite()
            Spr = \Spr
            DisplaySprite(Spr, \X, \Y)
        EndWith
    Else
        With TextSprite(Text)
            Spr = CreateSprite(#PB_Any, W, H)
            \Spr = Spr
            \X = X
            \Y = Y
            \W = W
            \H = H
            \C1 = C1
            \C0 = C0
            If StartDrawing(SpriteOutput(Spr) )
                Box(0, 1, W - 1, H - 1, C0)
                DrawingMode(#PB_2DDrawing_Transparent)
                If Alig = 1: TX = 0: EndIf
                If Alig = 2: TX = W - TextWidth(Text): EndIf
                If Alig = 3: TX = (W - TextWidth(Text) ) / 2: EndIf
                DrawText(TX, 0, Text, C1)
                StopDrawing()
            EndIf
        EndWith
    EndIf
EndProcedure

Structure palSprite
    Spr.I
    x1.I
    y1.I
    x2.I
    y2.I
    C0.I
    C1.I
    cQ.I
    gradFlag.I
EndStructure

Global NewMap PalSprite.palSprite()

Procedure DispLine(x1, y1, x2, y2, c0, c1 = -1, gradFlag = 1)
    Define ccode.S
    Define.D angle, dx, dy
    If c1 = -1
        cQ = 1
        ccode = RSet(Hex(c0), 6, "0")
    Else
        cQ = 2
        ccode = RSet(Hex(c0), 6, "0") + RSet(Hex(c1), 6, "0")
    EndIf
    KeyPtr = FindMapElement(PalSprite(), ccode)
    If KeyPtr
        With PalSprite()
            Spr = \Spr
            ;ClipSprite(Spr, 1, 0, 2, 1)
            ;ClipSprite(Spr, 0, 1, 1, 2)
            angle = ATan2(x1 - x2, y2 - y1) - (#PI / 2)
            dx = Cos(angle)
            dy = - Sin(angle)
            TransformSprite(Spr, x1 + dx, y1 + dy, x2 + dx, y2 + dy, x2, y2, x1, y1)
            SpriteQuality(\gradFlag)
            DisplaySprite(Spr, 0, 0)
        EndWith
    Else
        With PalSprite(ccode)
            Spr = CreateSprite(#PB_Any, 2 * CQ, 1)
            \Spr = Spr       
            \X1 = X1
            \Y1 = Y1
            \X2 = X2
            \Y2 = Y2
            \CQ = CQ
            \C0 = C0
            \C1 = C1           
            \gradFlag = gradFlag           
            If StartDrawing(SpriteOutput(Spr) )
                If CQ = 1
                    Box(0, 0, 2, 1, C0)
                Else
                    If CQ = 2
                        Box(0, 0, 2, 1, C0)
                        Box(2, 0, 2, 1, C1)
                    EndIf
                EndIf
                StopDrawing()
            EndIf
        EndWith
    EndIf
EndProcedure

Procedure DispBox(x1, y1, x2, y2, c0, c1 = -1, gradFlag = 1)
    Define ccode.S
    If c1 = -1
        cQ = 1
        ccode = RSet(Hex(c0), 6, "0")
    Else
        cQ = 2
        ccode = RSet(Hex(c0), 6, "0") + RSet(Hex(c1), 6, "0")
    EndIf
    ccode + RSet(Hex(x1), 4, "0") + RSet(Hex(y1), 4, "0") + RSet(Hex(x2), 4, "0") + RSet(Hex(y2), 4, "0")
    KeyPtr = FindMapElement(PalSprite(), ccode)
    If KeyPtr
        With PalSprite()
            Spr = \Spr            
            If \cQ = 2
                ;ClipSprite(Spr, 1, 0, 2, 1)
                ClipSprite(Spr, 1, 0, 2, -2)
            EndIf
            TransformSprite(Spr, \x1, \y1, \x2, \y1, \x2, \y2, \x1, \y2)
            SpriteQuality(\gradFlag)
            DisplaySprite(Spr, 0, 0)
        EndWith
    Else
        With PalSprite(ccode)
            Spr = CreateSprite(#PB_Any, 2 * CQ, 1)
            \Spr = Spr       
            \X1 = X1
            \Y1 = Y1
            \X2 = X2
            \Y2 = Y2
            \CQ = CQ
            \C0 = C0
            \C1 = C1           
            \gradFlag = gradFlag           
            If StartDrawing(SpriteOutput(Spr) )
                If CQ = 1
                    Box(0, 0, 2, 1, C0)
                Else
                    If CQ = 2
                        Box(0, 0, 2, 1, C0)
                        Box(2, 0, 2, 1, C1)
                    EndIf
                EndIf
                StopDrawing()
            EndIf
        EndWith
    EndIf
EndProcedure

Procedure DispRect(x1, y1, x2, y2, c0)
    DispLine(x1, y1, x2, y1, c0)
    DispLine(x1, y1, x1, y2, c0)
    DispLine(x2, y1, x2, y2, c0)
    DispLine(x1, y2, x2, y2, c0)
EndProcedure


Procedure main()
    Define.I win0 = OpenWindow(#PB_Any, DesktopScaledX(100), DesktopScaledY(100), DesktopScaledX(800), DesktopScaledY(600), "")
    screenCreate(1, win0)
    mouseCreate()
    Define *ms.mouse = *mouse
    Imax = Int(ScreenHeight() / 16) - 1
    Repeat
        Lap0 = Lap
        Lap = ElapsedMilliseconds()        
        Delay(1) ; 100 hertz
        ExamineKeyboard()
        ExamineMouse()
        TextDraw(0, 0, 64, 16, "Id", RGB(191, 191, 191), RGB(0, 127, 127), 3)
        For I = 1 To Imax
            Y = I * 16
            TextDraw(0, Y, 64, 16, Str(I), RGB(191, 191, 191), RGB(0, 63, 127), 3)
        Next
        DispRect(100, 50, 300, 150, RGB(255, 255, 255) )
        DispBox(100, 200, 300, 300, RGB(255, 255, 255) )
        DispBox(100, 350, 300, 450, RGB(255, 0, 255), RGB(0, 255, 0) )
        DisplaySprite(*ms\sprite, MouseX(), MouseY() )
        FlipBuffers()
        Cycle + 1
    Until KeyboardPushed(#PB_Key_Escape) Or MouseButton(#PB_MouseButton_Right)
    Repeat
        Delay(1) ; 100 hertz
        ExamineKeyboard()
        ExamineMouse()
        FlipBuffers()
    Until Not MouseButton(#PB_MouseButton_Right)
EndProcedure

main()

; IDE Options = PureBasic 5.73 LTS (Windows - x64)
; CursorPosition = 185
; FirstLine = 167
; Folding = f-
; EnableXP
Avatar de l’utilisateur
case
Messages : 1546
Inscription : lun. 10/sept./2007 11:13

Re: Il est où le problème avec ce code ?

Message par case »

non pas de soucis mis a part qu'e j'ai du ajouter un waitwindowevent(0) dans la boucle principale pour éviter au programme de freeze tout marche normalement pas de souris folle, pas de message sur le réseau desactivé.
si il y a un virus c'est sur ta machine pas dans ton code.

Code : Tout sélectionner

 
    Repeat
      WaitWindowEvent (0) ; 
tu devrais essayer d'ajouter ca, peut être que c'est lié a ton problème
le système ne reprenant pas la main la souris se positionne peut être a un endroit zarbi de ton écran et tu peux pas la bouger alors quand tu clic peut être ça active/désactive ton réseau vu que c'est sur l’icône réseau
ImageImage
Avatar de l’utilisateur
SPH
Messages : 4945
Inscription : mer. 09/nov./2005 9:53

Re: Il est où le problème avec ce code ?

Message par SPH »

Moi, je n'ai pas osé le tester :!: :arrow: :|

!i!i!i!i!i!i!i!i!i!
!i!i!i!i!i!i!
!i!i!i!
//// Informations ////
Intel Core i7 4770 64 bits - GTX 650 Ti
Version de PB : 6.12LTS- 64 bits
Ollivier
Messages : 4197
Inscription : ven. 29/juin/2007 17:50
Localisation : Encore ?
Contact :

Re: Il est où le problème avec ce code ?

Message par Ollivier »

@case

Ok c'est exactement ça. Et W10 quand il freeze, il fout mon curseur souris sur l'icône réseau.

Merci case pour cette analyse.
Répondre