Comment mettre en place une minuterie en c?
Nous voulons ajouter un timer pour notre programme en C sous Linux plate-forme.
Nous essayons d'envoyer les paquets et nous voulons savoir combien de paquets envoyés en 1 minute. Nous voulons que la minuterie pour s'exécuter en même temps que le while
boucle pour envoyer le paquet est en cours d'exécution. Par exemple:
while(1)
{
send packets;
}
Cette boucle va continuer à envoyer les paquets jusqu'à ce que ctrl-z est pressé. Le minuteur doit être utilisé pour arrêter la boucle au bout de 60 secondes.
Pourquoi ne pas simplement fork() et d'enfants, processus de veille sur ses parents?
OriginalL'auteur Sowmya Msk | 2012-04-17
Vous devez vous connecter pour publier un commentaire.
Vous pourriez faire quelque chose comme ceci:
Si la boucle de frais généraux s'avère être excessive, vous pouvez amortir les frais généraux par l'envoi de N paquets par itération et en incrémentant le comte en N de chaque itération.
OriginalL'auteur Lance Richardson
Viens de vérifier le temps à chaque itération de la boucle et quand 1 minute s'est écoulée, comptez le nombre de paquets que vous avez envoyés.
Modifier modifiés pour tenir compte de ce que la question demande réellement!
Si il faut 100 secondes pour envoyer un paquet, ce code va prétendre qu'un paquet a été envoyé, alors qu'en réalité, aucun paquet n'a été envoyé avant la 60 secondes se sont écoulées. C'est trompeur, je pense que vous devriez ajouter un minuteur de vérifier avant d'augmenter numPackets. Ou alernatively, l'utilisation sur le comptoir pour commencé transmissions et un autre pour les finis de transmissions.
Jacinto: simple est beau.
non, il ne sera pas: le paquet est envoyé, puis le compteur est incrémenté.
Je pense que Lundin point est qu'il n'y a rien à montrer si la boucle résilié à exactement 60 secondes, ou pas. Pour résoudre ce problème, vous pouvez enregistrer à la fois (), avant le début de la boucle et après la boucle de la résiliation, de sorte que la durée réelle peut être calculé et affiché.
OriginalL'auteur JeremyP
Pouvez également consulter ce http://www.gnu.org/software/libc/manual/html_node/Setting-an-Alarm.html pour régler les minuteries qui va envoyer des signaux à votre processus et vous pouvez arrêter la boucle while.
OriginalL'auteur Fred
Oeil à la norme
temps (le)
fonction.OriginalL'auteur unwind
Ici est extrait de code de itimer qui peut être utilisé pour différents intervalles de temps sur le C avec plate-forme linux:
espère que ça va aider.
OriginalL'auteur HuntM
Utilisation wheetimer (et ses variantes) structures de données pour mettre en œuvre des chronomètres.
OriginalL'auteur Abhishek Sagar
homme 3 couchages:
En fait, il n'. Par la création d'un nouveau thread et de la faire dormir pendant 60 secondes, vous savez que 60 secondes est quand le thread est terminé en cours d'exécution. Il ne devrait vraiment pas être inline son code de timing avec son code de test, de sorte que cette réponse est appropriée, même si elle n'est pas la façon dont je le ferais.
Jacinto: il suffit de pas. Création d'un thread comme celui-ping de retour vers le thread d'origine juste d'utiliser le sommeil est une piètre excuse pour une mauvaise solution. L'OP doit utiliser un timer, pas quelque chose qui dort.
À chacun son propre. J'imagine que vous aurez à envoyer le logiciel de la police lors de la elcuco t-il 🙂
Je vais vous faire! Et btw, c'est nightcracker pas nightcraker ^^
OriginalL'auteur elcuco