une horloge ....lente

Programmation d'applications complexes
Avatar de l’utilisateur
SPH
Messages : 4722
Inscription : mer. 09/nov./2005 9:53

une horloge ....lente

Message par SPH »

Salut,

petit soucis avec mon horloge qui est mega lente sur mon pb 5 (pas essayé avec pb4). Avez vous une explication ?

merciiii

Code : Tout sélectionner

; SPH(2006)
; PB4 

InitSprite() 
InitMouse() 
InitKeyboard() 

;SetPriorityClass_ ( GetCurrentProcess_ (), #IDLE_PRIORITY_CLASS ) 

If ExamineDesktops() 
   dw.w=DesktopWidth(0) 
   dh.w=DesktopHeight(0)
   do.b=DesktopDepth(0)
Else 
   dw.w=1024 
   dh.w=768 
EndIf 

OpenScreen(dw,dh,do,"Les horloges de SPH") 


xx=dw/2
yy=dh/2
pis.f=ATan(1)*12.1585
pim.f=ATan(1)*12.1585
pih.f=ATan(1)*2.4317
echp=yy/1.4
;echh=yy/2.4
echm=yy/1.5
col=RGB(33,33,33)
ii.f=Random(20)/100
uu.f=Random(20)/100
ii2.f=Random(20)/100
uu2.f=Random(20)/100

;;;;;;;;;;;
;;;;;;;;;;;
;;;;;;;;;;;


Repeat ; Boucle principale

xxx=Cos(ii)*45+Sin(ii2)*40
yyy=Sin(uu)*45-Cos(uu2)*40
decx.f=Cos(ii)/18+Sin(uu2)/15

ExamineMouse() 
xmouse=MouseDeltaX()/45 ; /x : x= sensibilité
ymouse=MouseDeltaY()/45 ; /x : x= sensibilité

If MouseButton(#PB_MouseButton_Left)<>0
s+1:If s>=60:s-60:m+1:EndIf:If m=60:m=0:h+1:EndIf:If h=12:h=0:EndIf
Else
h=Hour(Date()):m=Minute(Date()):s=Second(Date())
EndIf


;*****
ClearScreen(0)
StartDrawing(ScreenOutput()) 
;;;;;;;;;;;
ss.f=decx+s/pis
mm.f=decx+(m+s/60)/pim
hh.f=decx+(h+m/60)/pih
For i=0 To 11
If i=0 Or i=3 Or i=6 Or i=9
co=RGB(200,210,220)
Else
co=RGB(70,80,90)
EndIf
For u=1 To 5
Plot(xx+Sin(decx+i/pih)*(echp+xxx)+Random(6)-3,yy-Cos(decx+i/pih)*(echp+yyy)+Random(6)-3,co)
;Plot(xx+Sin(decx/12+i/pih)*echp+Random(6)-3,yy-Cos(decx/12+i/pih)*echp+Random(6)-3,co)
Next
Next
hh$=FormatDate("%hh:%ii:%ss", Date())
DrawText(0,0,hh$,1,0)
For u=0 To 15
For i=0 To 55
If Point(i,u)=1
r=(50+Random(u*12))
rv=RGB(r,r,r/(i/15+1))
Plot(20+i*8+Random(6),dh-120+u*8+Random(6),rv)
Plot(20+i*8+Random(6),dh-120+u*8+Random(6),rv)
Plot(20+i*8+Random(6),dh-120+u*8+Random(6),rv)
EndIf
Next
Next


x1=Sin(mm)*(echm+xxx)
y1=-Cos(mm)*(echm+yyy)
;Line(xx,yy,x1,y1,RGB(200,200,0))
dist=Sqr(x1*x1+y1*y1)
xx1.f=x1/dist
yy1.f=y1/dist
xx2.f=xx
yy2.f=yy
u=0
For i=0 To dist/3
r=Random(255)
Plot(xx2-u/32+Random(u/16),yy2-u/32+Random(u/16),RGB(r,r,0))
xx2+xx1
yy2+yy1
u+2
Next
For i=0 To dist/2
u-1
r=Random(255)
Plot(xx2-u/32+Random(u/16),yy2-u/32+Random(u/16),RGB(r,r,0))
xx2+xx1
yy2+yy1
Next


x1=Sin(hh)*(echm+xxx)
y1=-Cos(hh)*(echm+yyy)
;Line(xx,yy,x1,y1,RGB(200,0,0))
dist=Sqr(x1*x1+y1*y1)
xx1.f=x1/dist
yy1.f=y1/dist
xx2.f=xx
yy2.f=yy
u=0
For i=0 To dist/8
r=Random(255)
Plot(xx2-u/8+Random(u/4),yy2-u/8+Random(u/4),RGB(r,20,r/3))
xx2+xx1
yy2+yy1
u+2
Next
For i=0 To dist/4
u-1
r=Random(255)
Plot(xx2-u/8+Random(u/4),yy2-u/8+Random(u/4),RGB(r,20,r/3))
xx2+xx1
yy2+yy1
Next

x1=Sin(ss)*(echm+xxx)
y1=-Cos(ss)*(echm+yyy)
dist=Sqr(x1*x1+y1*y1)
xx1.f=x1/dist
yy1.f=y1/dist
xx2.f=xx-2
yy2.f=yy-2
For i=0 To dist
If Random(2)=1
Plot(xx2+Random(4),yy2+Random(4),RGB(0,0,Random(255)))
EndIf
xx2+xx1
yy2+yy1
Next

;ii+0.024
;uu+0.0189
;ii2+0.013
;uu2+0.021
ii+0.007
uu+0.0059
ii2+0.0043
uu2+0.0031

;;;;;;;;;;;
StopDrawing() 
;*****

FlipBuffers() 

Delay(1)

ExamineKeyboard() 
Until KeyboardPushed(#PB_Key_All) 
End 

http://HexaScrabble.com/
!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.00 - 64 bits
Mesa
Messages : 1093
Inscription : mer. 14/sept./2011 16:59

Re: une horloge ....lente

Message par Mesa »

C'est tout bon avec mon pb562 x86.

Tu peux peut-être essayer les options de openscreen à savoir, d'après la doc:
... Définit le mode de synchronisation utilisé avant l'échange des buffers.
(Vertical blank synchronization = Synchro verticale)').

Peut prendre l'une des valeurs suivantes :
#PB_Screen_NoSynchronization : Désactive la synchronisation
#PB_Screen_WaitSynchronization : Active la synchronisation (mode par défaut)
#PB_Screen_SmartSynchronization: Active la synchronisation en essayant de préserver le temps processeur,lorsque le jeu est en mode plein écran.

Attendre la synchronisation permet d'avoir des inversions de buffers parfaites, sans 'tearing' (ancienne et nouvelle image à moitié visible) ou autres effets parasites car l'inversion est effectuée lorsque que le faisceau lumineux est en dehors de la partie visible de l'écran. De plus, l'inversion se fait à un rythme régulier, en relation avec sa fréquence de rafraîchissement: par exemple, pour un écran en 60 Hz, l'inversion pourra se faire au maximum 60 fois par seconde (donc on aura un rythme régulier de 60 images/secondes).
ainsi que le taux de rafraîchissement.


Pour info, il est toujours bon de se rappeler que windows 8 et 10 ont leurs propres APIs et qu'ils émulent les APIs antérieurs (API windows 7, xp, etc). Ce qui donnent parfois des ralentissements inexpliqués et mêmes des comportements un peu bizarres surtout avec directX.

M.
Répondre