Come aspettare un certo periodo di tempo se le funzioni temporali non sono affidabili [chiuso]

0

Come posso gestire il mio codice per aspettare esattamente un certo periodo di tempo (ad esempio 10 secondi), se tutte * funzioni temporali sul sistema non sono affidabili e restituire immediatamente?

Sleep(10000); // Do not sleep for 10s and execute directly the next function
MyFunction();

Se possibile, la soluzione dovrebbe consumare meno cicli di CPU possibili.

Naturalmente non sono disponibili connessioni Internet

* WaitForSingleObject, GetSystemTime, RDTSC e così via ...

    
posta Joe Doe 28.09.2016 - 21:27
fonte

2 risposte

1

Non è possibile. Se non hai accesso a un'API funzionante per tenere traccia del tempo, non puoi tenere traccia del tempo.

La soluzione migliore è probabilmente scrivere un ciclo "inutile" che non fa altro che perdere tempo, e quindi capire quante volte deve essere eseguito quel ciclo per ritardare il programma della quantità di cui hai bisogno. Questo, ovviamente, consumerà molti cicli della CPU.

Potresti essere in grado di evitare di consumare così tanti cicli della CPU eseguendo alcune attività inutili che sono legate all'I / O, come ad esempio aprire e chiudere ripetutamente un file.

    
risposta data 29.09.2016 - 14:38
fonte
1

Penso che questo sia quello che stai cercando:

using System.Threading.Tasks;

var task = Task.Run(() => MyFunction());
if (task.Wait(TimeSpan.FromSeconds(10)))
    return task.Result;
else
    throw new Exception("MyFunction did not complete in time.");

Dato che hai già provato a Sleep() nel tuo codice di esempio, presumo che il timer del computer sia abbastanza affidabile per farlo funzionare.

Ulteriori letture
Elaborazione di un task.TimeoutAfter metodo

    
risposta data 29.09.2016 - 19:45
fonte

Leggi altre domande sui tag