J’ai un fichier de données Dump, avec différentes données horodatées disponibles, j’obtiens l’heure de l’horodatage et je dors mon thread c pour cette période. Mais le problème est que la différence de temps réelle est de 10 secondes et les données que je reçois à la réception sont presque 14, 15 secondes de retard. J’utilise un OS de fenêtre. Veuillez me guider.
Désolé pour ma semaine en anglais.
Si je comprends bien:
Si ce qui précède décrit ce que vous faites, votre conception comporte plusieurs défauts:
Si vous donnez plus de détails, il sera plus facile de diagnostiquer la source du problème. sleep
comme vous le croyez (c’est en effet une timer vraiment médiocre) ou une autre partie de votre système.
Si votre fichier est volumineux, je parierai que le temps supplémentaire vient de la lecture des données et de leur envoi par câble. Vous devez mesurer le temps consommé dans le processus d’envoi (temps de lecture avant et après la fin de l’envoi).
S’il s’agit bien de la source du temps supplémentaire, il vous suffit de supprimer ce délai de la prochaine fois pour attendre.
Exemple: L’envoi du bloc de données précédent a pris 4 secondes, le bloc suivant est 10 secondes plus tard, mais comme vous avez déjà consommé 4 secondes, il vous suffit d’attendre 6 secondes.
sleep
est toujours un minuteur imprécis et, de toute évidence, le mécanisme ci-dessus ne fonctionnera pas si le temps d’envoi est plus long que le délai entre les envois, mais vous avez une idée.
Le sumil de correction n’est pas si mauvais dans un environnement Windows que dans unix. La précision de Windows sleep est une milliseconde, la précision du sumil unix est la seconde. Si vous n’avez pas besoin d’un minutage de haute précision (et si le réseau est impliqué, un chronométrage de haute précision est de toute façon hors d’atteinte) le sumil devrait être correct.
La fonction de veille va dormir au moins aussi longtemps que le temps que vous spécifiez, mais rien ne garantit qu’elle ne dormira pas plus longtemps. Si vous avez besoin d’un intervalle précis, vous devrez utiliser un autre mécanisme.
Tout programmateur de système d’exploitation multitâches moderne ne garantira aucun délai exact pour les applications utilisateur. Vous pouvez essayer d’atsortingbuer une priorité en temps réel à votre application, par exemple, à partir d’un gestionnaire de tâches Windows. Et voyez si ça aide.
Une autre solution consiste à mettre en œuvre un mode de veille «contrôlé», c’est-à-dire à dormir une série de 500 ms, en vérifiant l’horodatage actuel entre eux. ainsi, si vous dormez tous un 1 au lieu de 500 ms à un moment donné – vous le remarquerez et ne ferez pas de sumil supplémentaire (500 ms).
Essayez une timer multimédia . Il est à peu près aussi précis que possible sur un système Windows. Il y a un bon article sur CodeProject à leur sujet.
La fonction de sumil peut prendre plus de temps que demandé, mais jamais moins. Utilisez les fonctions du minuteur winapi pour récupérer une fonction dans un intervalle à partir de maintenant.
Vous pouvez également utiliser le planificateur de tâches Windows, mais cela va au-delà des options autonomes programmatiques.