Gambas-it

Gambas3 => Programmazione => Topic aperto da: vuott - 09 Febbraio 2018, 20:16:07

Titolo: Come rallentare un ciclo ?
Inserito da: vuott - 09 Febbraio 2018, 20:16:07
https://www.iprogrammatori.it/forum-programmazione/cplusplus/come-rallentare-ciclo-t33964.html#p8594350
Titolo: Re:Come rallentare un ciclo ?
Inserito da: Top Fuel - 09 Febbraio 2018, 23:59:10
Noi abbiamo Sleep e Wait, se non vado errante. :)
Titolo: Re:Come rallentare un ciclo ?
Inserito da: vuott - 10 Febbraio 2018, 00:35:56
Noi abbiamo Sleep e Wait

......e se io volessi un ritardo inferiore al millesimo di secondo ?

(http://rs1284.pbsrc.com/albums/a567/sherlock19/sherlockwinking_zps5bb38d81.gif?w=280&h=210&fit=crop)
Titolo: Re:Come rallentare un ciclo ?
Inserito da: kicco - 10 Febbraio 2018, 09:15:53
Teoria:
Creo un ciclo, avvio un contatore, quando arrivo ad un millisecondo esco dal ciclo e memorizzo l'indice del ciclo.
Calcolo le frazioni di millisecondo.
Quando mi serve genero un ciclo con valore definito (frazione di millisecondi)
Certo questo contravviene alla condizione posta, che la temporizzazione fosse slegata dalla velocità del microprocessore!
È un idea tanto strampalata?
 :ciao:
Titolo: Re:Come rallentare un ciclo ?
Inserito da: vuott - 10 Febbraio 2018, 14:17:10
È un idea tanto strampalata?


(https://media.giphy.com/media/ETiEhrEleAHvO/giphy.gif)
Titolo: Re:Come rallentare un ciclo ?
Inserito da: Gianluigi - 10 Febbraio 2018, 14:48:40
Ammetto la mia ignoranza in materia, ma questo non ritarda il ciclo di un microsecondo?:
Codice: [Seleziona]
Public Sub Main()

  Dim i As Integer
  Do
    Inc i
    Wait 0.0000001
  Loop Until i = 2000000
  Print i

End

Ho provato a mettere in pratica le indicazioni di kicco ma mi sono slogato una spalla  ;D

P.S. con Sleep non funziona con Wait sembra di si, potete fare la prova prima commentando Wait e poi de-commentandolo per vedere la differenza.

 :ciao: :ciao:
Titolo: Re:Come rallentare un ciclo ?
Inserito da: vuott - 10 Febbraio 2018, 16:17:46
La domanda vera è:
le funzioni di "attesa" di Gambas supportano valori inferiori al millesimo di secondo ?


Forse potrebbero aiutarci questi esempi:  :-X
Codice: [Seleziona]
Public Sub Main()

  Print CFloat(Time)

  Wait 0.001
 
  Print CFloat(Time)
  Print "      |^^^"
  Print "      Sdcm"
  Print "S= secondi\nd= decimi di sec.\nc= centesimi di sec.\nm= millisecondi"

End

Codice: [Seleziona]
Public Sub Main()

  Print CFloat(Time)

  Wait
 
  Print CFloat(Time)
  Print "      |^^^"
  Print "      Sdcm"
  Print "S= secondi\nd= decimi di sec.\nc= centesimi di sec.\nm= millisecondi"

End

Codice: [Seleziona]
Public Sub Main()

  Print CFloat(Time)

  Wait 0.0001
 
  Print CFloat(Time)
  Print "      |^^^"
  Print "      Sdcm"
  Print "S= secondi\nd= decimi di sec.\nc= centesimi di sec.\nm= millisecondi"

End
Titolo: Re:Come rallentare un ciclo ?
Inserito da: Gianluigi - 10 Febbraio 2018, 16:34:50
Ottima dimostrazione  :ok:
Dai mille in su non sortisce effetto alcuno.
Pertanto non può essere usato ad esempio per i miei microsecondi  ;D

Comunque lo avevo premesso che di queste cose ci capisco...  :poke:

 :ciao:

P.S. Stai a vedere che kicco ha ragione...
Titolo: Re:Come rallentare un ciclo ?
Inserito da: vuott - 10 Febbraio 2018, 17:07:38
P.S. Stai a vedere che kicco ha ragione...

(https://gifopolis.com/wp-content/uploads/2016/10/gifopolis.com_1610006a.gif)
Titolo: Re:Come rallentare un ciclo ?
Inserito da: Top Fuel - 10 Febbraio 2018, 23:04:33
[......e se io volessi un ritardo inferiore al millesimo di secondo ?

For i = 0 To 1
Next

 ;D ;D
Titolo: Re:Come rallentare un ciclo ?
Inserito da: vuott - 11 Febbraio 2018, 01:43:57
A questo punto suggerirei una seduta spiritica...

(http://www.romanticamentefantasy.it/wp-content/uploads/2015/09/tumblr_nazf6eY97B1qhu3sco2_500.gif)
Titolo: Re:Come rallentare un ciclo ?
Inserito da: kicco - 11 Febbraio 2018, 08:43:27
 :ciao: :ciao:
Pensavo in realtà a una cosa così, ma purtroppo, ho l'impressione, che il contatore non parta in parallelo al Main quando riceve il comando enabled, ma aspetti che termini il ciclo LOOP...

Codice: [Seleziona]
Private timer1 As Timer 
Private a As Boolean

Public Sub Main()
 
  Dim i As Integer
 
  a = False
  timer1 = New Timer As "timer1"
  timer1.delay = 1  'carica 1ms nel timer
  timer1.enabled = 1  'fa partire il timer
 
  Do
    Inc i
  Loop Until a = True
  Print i
 
End

Public Sub Timer1_timer()
 
  a = True  'allo scadere modifica la variabile
  timer1.Enabled = 0  'ferma il timer
  Print "Stop"

End
:ciao:
PS: vediamo come mi cazzia Vuott, stavolta!  :P
Titolo: Re:Come rallentare un ciclo ?
Inserito da: vuott - 11 Febbraio 2018, 14:08:10
 :rolleyes: ...no, scusa.... mi puoi spiegare per quale ragione con il tuo codice il ciclo
Codice: [Seleziona]
  Do
    Inc i
  Loop Until a = True
 
riceve un'attesa inferiore al millisecondo ? 


Titolo: Re:Come rallentare un ciclo ?
Inserito da: kicco - 11 Febbraio 2018, 18:02:35
Perchè credo che la velocità del microprocessore permetta di effettuare un numero elevato di cicli in 1ms.
 :ciao:
Titolo: Re:Come rallentare un ciclo ?
Inserito da: Gianluigi - 11 Febbraio 2018, 19:37:31
......e se io volessi un ritardo inferiore al millesimo di secondo ?

Naturalmente stai parlando di risorse in puro Gambas, non è che alla fine te ne esci con le librerie C che prevedono micro e nano secondi, giusto?
Titolo: Re:Come rallentare un ciclo ?
Inserito da: vuott - 11 Febbraio 2018, 21:33:47
Naturalmente stai parlando di risorse in puro Gambas, non è che alla fine te ne esci con le librerie C che prevedono micro e nano secondi, giusto?

     :rotfl: