Couple de choses ..
Si vous voulez vous assurer que la fonction prend un temps X pour terminer, quelle que soit la durée du code réel au sein de la fonction a, quelque chose comme ça (code très pseudo)
class Delay
{
public:
Delay(long long delay) : _delay(delay) // in microseconds
{
::gettimeofday(_start, NULL); // grab the start time...
}
~Delay()
{
struct timeval end;
::gettimeofday(end, NULL); // grab the end time
long long ts = _start.tv_sec * 1000000 + _start.tv_usec;
long long tse = end.tv_sec * 1000000 + end.tv_usec;
long long diff = tse - ts;
if (diff < _delay)
{
// need to sleep for the difference...
// do this using select;
// construct a struct timeval (same as required for gettimeofday)
fd_set rfds;
struct timeval tv;
int retval;
FD_ZERO(&rfds);
diff = _delay - diff; // calculate the time to sleep
tv.tv_sec = diff/1000000;
tv.tv_usec = diff % 1000000;
retval = select(0, &rfds, NULL, NULL, &tv);
// should only get here when this times out...
}
}
private:
struct timeval _start;
};
Définissez ensuite une instance de cette classe de retard dans la partie supérieure de votre fonction de retarder - devrait faire l'affaire ... (ce code est non testé et pourrait avoir des bugs en elle, je viens dactylographié pour vous donner une idée ..)
Je ne comprends pas ce que vous demandez. Voulez-vous que l'appel de fonction dure 10 à 20 secondes, ou voulez-vous dormir pendant 10 à 20 secondes, puis l'appeler? Combien de temps dure un appel de fonction est à peu près la fonction elle-même. –
Je veux appeler une fonction pendant environ 10 à 20 secondes ... ou vraiment appeler n'importe quoi ... le problème est de savoir comment mesurer au mieux l'heure ... il y a beaucoup de fonctions de temps Unix/Posix qui se chevauchent. – Xofo
avez-vous une limite sur combien de fois vous voulez appeler cette fonction? Une fois? Des millions de fois? Si c'est une seule fois, vous pouvez regarder dans l'enregistrement d'un préréglage de la minuterie pendant 20 secondes. –