![]() |
|
|
google unix.com
|
|||||||
| Forums | S'inscrire | Forum Rules | Liens | Albums | FAQ | Liste des membres | Calendrier | Recherche | Aujourd'hui, les postes | Marquer les forums comme lus |
| HP-UX HP-UX (Hewlett Packard UniX) Hewlett-Packard est propriétaire de la mise en œuvre du système d'exploitation Unix, basés sur System V. |
Plus d'UNIX et Linux Forum Sujets Vous trouverez peut-être utile
|
||||
| Fil | Thread Starter | Forum | Réponses | Last Post |
| ajouter la sortie d'une requête à une variable à être utilisés dans une autre requête | hazno | De programmation et de script Shell | 0 | 03-24-2009 08:52 PM |
| Mac OS X: Pourquoi votre Mac risque de ne pas dormir ou de rester en mode veille | iBot | OS X RSS | 0 | 03-19-2009 10:50 PM |
| localtime convertir à unixtime | AshishK | UNIX for Advanced & Expert Users | 2 | 10-30-2007 10:22 AM |
| Perl + localtime () | Optimus_P | De programmation et de script Shell | 3 | 07-09-2003 06:32 PM |
| dormir | Anna | UNIX pour les nuls Questions et réponses | 5 | 07-11-2001 12:52 AM |
![]() |
|
|
LinkBack | Thread Tools | Recherche sur ce Thread |
Rating:
|
Modes d'affichage |
|
|
|
||||
|
Dormir & query localtime
Salut,
Je travaille sur HPUX application et j'avais une question concernant le sommeil et localtime appel système en HPUX. Voici le code que nous avons: const uint32_t WAKE_INTERVAL_SEC (30 * 60); while (true) ( / / En savoir quelle heure il est temps (et currentTime); / / Thread d'aligner réveil avec horloge 30 minute c'est-à-dire si elle est actuellement 9h20 réveil après 10 minutes, / / Si elle est actuellement 9h05, réveillez-vous après 25 minutes. / / Calculer le nombre de secondes restantes dans cette demi-heure. sleepTime \u003d WAKE_INTERVAL_SEC - (currentTime WAKE_INTERVAL_SEC%); tout (1) ( dormir (sleepTime); / / Ne travail régulier tptr \u003d localtime (& currentTime); si (12-tptr \u003d\u003d> tm_hour & & tptr-> tm_min <WAKE_INTERVAL_MIN) ( / / Midi de travail à faire ) ) Comportement attendu: Comme indiqué dans le code ci-dessus, nous nous attendons à ce que chaque demi-heure, un certain travail à faire et si ce moment se trouve être entre 12 et 12h30, alors nous aussi faire le travail à midi. Comportement réel: La plupart du temps, il fonctionne comme prévu. Mais quelques fois, le sommeil semble sortir quelques secondes avant 12h30 et ainsi de la logique et ne pas le midi de travail. Idéalement, je m'attends à condition que les heures de travail à l'échec, car le fil a réveillé à 12h30 et donc il ne peut pas satisify midi condition de travail. (Trace dans syslog indique que des travaux ont débuté à 12h30, mais l'exploitation forestière elle-même aurait fallu un certain temps et je soupçonne le sommeil pourrait avoir réveillé tôt) Question: - Puis dormir se réveiller avant le moment de la planification (autres que SIGALRM)? Existe-t-il d'autres conditions où le sommeil peut se réveiller avant l'heure prévue? - Puis-localtime utilisé pour la comparaison de retour mauvais moment? - Est-il possible que certains ajustements sont effectués en interne (de mai à la dérive de l'horloge interne, etc) dont les résultats se réveiller du sommeil dans un deuxième plus tôt que prévu ou locales de temps à faire une sorte d'adaptation pour une raison quelconque? Tout ce qui concerne les entrées dans ce sont appréciés. Merci & Regards, nSv |
|
||||
|
Pourquoi ne pas utiliser cron ou à programmer votre code? Ceux-ci sont conçus pour exécuter des commandes ou des scripts exactement au bon moment.
De plus, les troubles du sommeil (1) n'est pas garantie de dormir exactement une seconde. |
|
||||
|
Salut Jim,
Merci pour la réponse. En fait, des fils peut se réveiller n'importe quand sur la base du programmateur, de sorte que la logique a été de vérifier que le thread a besoin de sommeil, afin que son alignement de 30 minutes d'intervalle. With Regards, nsvora |
|
||||
|
J'ai essayé de transmettre ce bien: Vous ne pouvez pas garantir exactement comment le sommeil est long. Vous devez ajouter des slop (fudge factor) dans le calcul de votre seconde d'une manière ou d'une autre, il n'est pas aller au travail parfaitement à chaque fois - par exemple suppose que vous avez POSIX conforme du temps - c'est-à-dire., pas de secondes.: Code:
calculate duration of sleep: time_t how_long_to_sleep=1800; how_long_to_sleep-= time(NULL) % 1800; sleep(!how_long_to_sleep ? 1800 : how_long_to_sleep); temps après le test de réveil: Code:
time_t now=time(NULL); now=now % 1800; if( now < 2 && now > 1797) // sleep period ended close enough else // sleep period is off by too much fi Vous pouvez également essayer de usleep (en valeur) qui est plus fine granularité de ms, mais là encore, la valeur est le minimum. Il mai être plus long. Par exemple, un rang de priorité plus élevé d'emplois que celui-ci est en marche. |
![]() |
| Bookmarks |
| Thread Tools | Recherche sur ce Thread |
| Modes d'affichage | Rate this thread |
|
|