Pagina 1 di 2 1 2 ultimoultimo
Visualizzazione dei risultati da 1 a 10 su 18
  1. #1

    [VB.NET] Interval di un Timer

    Nel mio progetto utilizzo un timer per leggere ciclicamente dei valori. Finchè utilizzo un intervallo di 100 o 50 ms va tutto bene, tenete conto che ho la necessità di leggere molto frequentemente tali valori, ma quando scendo ulteriormente con il tempo non ho piu incremento di frequenza di lettura. Cosa posso fare?

  2. #2
    Da dove stai leggendo tali valori?
    Amaro C++, il gusto pieno dell'undefined behavior.

  3. #3
    Moderatore di Programmazione L'avatar di alka
    Registrato dal
    Oct 2001
    residenza
    Reggio Emilia
    Messaggi
    24,472
    Originariamente inviato da Antonyy74
    Nel mio progetto utilizzo un timer per leggere ciclicamente dei valori. Finchè utilizzo un intervallo di 100 o 50 ms va tutto bene, tenete conto che ho la necessità di leggere molto frequentemente tali valori, ma quando scendo ulteriormente con il tempo non ho piu incremento di frequenza di lettura. Cosa posso fare?
    Generalmente, il Timer non scende al di sotto dei 20 ms di Interval.

    Inoltre, non è uno strumento affidabile per le temporizzazioni, in quanto la precisione varia in base alla CPU occupata da altri processi, e comunque blocca il thread primario dell'applicazione.

    Per queste esigenze, in ogni caso, meglio passare al multithreading.
    MARCO BREVEGLIERI
    Software and Web Developer, Teacher and Consultant

    Home | Blog | Delphi Podcast | Twitch | Altro...

  4. #4
    Buongiorno,
    dunque questi valori li leggo da un valore che mi restituisce una funzione, la quale a sua volta legge dei valorei presi da una scheda Hardware. In pratica vado a leggere dei segnali analogici/digitali da me scelti.
    A volte mi interessa una scanzione anche di 10 volte al secondo e a volte dovrei prendere di valori almeno 100/1000 volte al secondo.

  5. #5
    Moderatore di Programmazione L'avatar di alka
    Registrato dal
    Oct 2001
    residenza
    Reggio Emilia
    Messaggi
    24,472
    Originariamente inviato da Antonyy74
    A volte mi interessa una scanzione anche di 10 volte al secondo e a volte dovrei prendere di valori almeno 100/1000 volte al secondo.
    Sicuramente, il Timer non consente di raggiungere una simile risoluzione, che a mio avviso è ardua da ottenere con una normale applicazione Windows, soprattutto se basata sul .NET Framework (che ha "agenti" in esecuzione in background che possono interferire nel momento meno opportuno).
    MARCO BREVEGLIERI
    Software and Web Developer, Teacher and Consultant

    Home | Blog | Delphi Podcast | Twitch | Altro...

  6. #6
    Originariamente inviato da Antonyy74
    Buongiorno,
    dunque questi valori li leggo da un valore che mi restituisce una funzione, la quale a sua volta legge dei valorei presi da una scheda Hardware. In pratica vado a leggere dei segnali analogici/digitali da me scelti.
    A volte mi interessa una scanzione anche di 10 volte al secondo e a volte dovrei prendere di valori almeno 100/1000 volte al secondo.
    Non puoi fare una cosa del genere. Puoi fare polling sulla scheda in questione da un thread separato, ma dato che lo scheduler assegna quanti di CPU a blocchi di qualche decina di millisecondi riuscirai ad ottenere i valori che chiedi ad una frequenza elevata solo per il tempo di CPU che viene assegnato al tuo thread, poi, quando lo scheduler manderà in esecuzione altri thread, avrai facilmente dei "buchi" di diverse decine di millisecondi.
    Amaro C++, il gusto pieno dell'undefined behavior.

  7. #7
    Utente di HTML.it
    Registrato dal
    Apr 2009
    Messaggi
    970
    Come ti è stato detto non puoi gestire con un Timer una simile frequenza di acquisizione. Nelle migliori delle ipotesi puoi arrivare a 100 acquisizioni al secondo ovvero 100 Hz, ma temporalmente incostanti l'una dall'altra, quindi non ti aspettare acquisizioni, parlando di 100 Hz, di valori distanti l'uno dall'altro di 10 ms.
    Puoi migliorare notevolmente la situazione usando un ciclo Do While...Loop, sorgerà poi pero il problema del blocco della UI che potresti eliminare utilizzando un Thread separato, ma avrai sempre l'incostanza delle acquisizioni.
    Dipende dalla criticità delle acquisizioni che devi fare....!

    Sbagliare è umano, perseverare è diabolico.

  8. #8
    Si potrebbe essere, come dici tu, critica. Ho la necessità a volte di ricevere i dati molto velocemente, non mi interessa che siano perfettamente in coda temporalmente ma velocemente. Per velocemente dico da 1000 volte/s a 10000 v/s. Quindi sono fregato mi sembra di capire ?

  9. #9
    Secondo me ci si può inventare qualcosa che giri in kernel mode; è sicuramente possibile, dato che la frequenza di campionamento è analoga a quella delle schede audio, ma non so se queste ultime abbiano un buffer on-board, tale per cui è sufficiente che il driver recuperi il contenuto del buffer ciclicamente invece di andare in polling continuo.
    Amaro C++, il gusto pieno dell'undefined behavior.

  10. #10
    Utente di HTML.it
    Registrato dal
    Apr 2009
    Messaggi
    970
    Originariamente inviato da Antonyy74
    ......non mi interessa che siano perfettamente in coda temporalmente ma velocemente. Per velocemente dico da 1000 volte/s a 10000 v/s. Quindi sono fregato mi sembra di capire ?
    Anche se non ti interessa che le acquisizioni siano temporalmente contigue mi sembra comunque inaccettabile come tipo di acquisizione qualsiasi cosa essa faccia, soprattutto quando parliamo di frequenze di 10000 Hz.
    Ora non sappiamo ne l'hardware ne il codice che utilizzi, sarebbe opportuno per noi saperne di più, non credi?

    Originariamente inviato da MItaly
    ....,ma non so se queste ultime abbiano un buffer on-board, tale per cui è sufficiente che il driver recuperi il contenuto del buffer ciclicamente invece di andare in polling continuo.
    Al 99,9% è presente un buffer, basta sfruttarlo a dovere.
    Sbagliare è umano, perseverare è diabolico.

Permessi di invio

  • Non puoi inserire discussioni
  • Non puoi inserire repliche
  • Non puoi inserire allegati
  • Non puoi modificare i tuoi messaggi
  •  
Powered by vBulletin® Version 4.2.1
Copyright © 2025 vBulletin Solutions, Inc. All rights reserved.