![]() |
|
|
google unix.com
|
|||||||
| Foros | Registro | Reglas de los Foros | Enlaces | Álbumes | Preguntas más frecuentes | Lista de miembros | Calendario | Búsqueda | Puestos de hoy | Marcar Foros Como Leídos |
| HP-UX HP-UX (Hewlett Packard Unix) de Hewlett-Packard es la aplicación de la propiedad del sistema operativo Unix, basado en System V. |
Más UNIX y Linux Foro Temas usted puede encontrar útiles
|
||||
| Hilo | Hilo para principiantes | Foro | Respuestas | Último mensaje |
| añadir la salida de una consulta a una variable que se utiliza en otra consulta | hazno | Programación de scripts de shell y | 0 | 03-24-2009 08:52 PM |
| Mac OS X: ¿Por qué el Mac no puede dormir o permanecer en modo de reposo | iBOT | OS X Soporte RSS | 0 | 03-19-2009 10:50 PM |
| convertir a unixtime localtime | AshishK | UNIX para usuarios avanzados y expertos | 2 | 10-30-2007 10:22 AM |
| Perl + localtime () | Optimus_P | Programación de scripts de shell y | 3 | 07-09-2003 06:32 PM |
| dormir | Anna | UNIX for Dummies Preguntas y Respuestas | 5 | 07-11-2001 12:52 AM |
![]() |
|
|
Linkback vínculo | Herramientas de hilo | Buscar en este Hilo |
Calificación:
|
Modos de visualización |
|
|
|
||||
|
dormir y localtime consulta
Hola,
Yo trabajo en la aplicación y HPUX i había una pregunta sobre el sueño y en la llamada al sistema localtime HPUX. Este es el código que tenemos: const uint32_t WAKE_INTERVAL_SEC (30 * 60); while (true) ( / / Para saber qué hora es tiempo (y tiempo actual); / / Hilo de alinear con reloj despertador 30 minutos es decir, si actualmente está 9:20 despertar después de 10 minutos, / / Si es actualmente 9:05, despierta después de 25 minutos. / / Calcular el número de segundos restantes en esta media hora. sleepTime \u003d WAKE_INTERVAL_SEC - (tiempo actual WAKE_INTERVAL_SEC%); while (1) ( dormir (sleepTime); / / Do trabajo ordinario tptr \u003d localtime (& tiempo actual); si (12-tptr \u003d\u003d> tm_hour & & tptr-> tm_min <WAKE_INTERVAL_MIN) ( / / Mediodía trabajo por hacer ) ) Comportamiento esperado: Como se menciona en el código anterior, esperamos que cada media hora, algún trabajo que hacer y si ese tiempo pasa a ser de entre 12 y 12:30 horas luego del mediodía también hacer el trabajo. Comportamiento real: La mayoría de las veces funciona como se esperaba. Pero algunas veces, el sueño parece salir unos segundos antes de las 12:30 y por lo que la lógica y no hace el trabajo al mediodía. Lo ideal sería que yo esperaría que la condición de trabajo al mediodía al fracaso, ya que tiene hilo se despertó a las 12:30 y, por tanto, no puede satisify mediodía condición de trabajo. (Trace en syslog indica que ha comenzado a regular el trabajo a las 12:30, pero la tala en sí se han tomado algún tiempo y sospecho que el sueño podría haber despertado temprano) Pregunta: - ¿Puedo dormir despertar antes de tiempo el calendario (excepto SIGALRM)? ¿Hay otras condiciones en las que podría despertar del sueño antes de la hora? - ¿Puede utilizarse para la comparación localtime retorno mal momento? - ¿Es posible que haya algún tiempo hacer los ajustes internos (puede ser por la deriva del reloj interno, etc) lo que se traduce en el despertar del sueño de un segundo antes de lo previsto la hora local o haciendo algún tipo de ajuste por alguna razón? Todo esto en cuanto a los insumos son apreciadas. Gracias y Saludos, NSV |
|
||||
|
¿Por qué no usar cron o al programar el código? Estos son diseñados para ejecutar comandos o secuencias de comandos en el momento justo.
Además, el sueño (1) no está garantizada para dormir exactamente un segundo. |
|
||||
|
Hola Jim,
Gracias por la respuesta. En realidad los hilos puede despertar en cualquier momento sobre la base de la agenda, por lo que la lógica era comprobar el tiempo que el hilo tiene que dormir para que su línea con intervalos de 30 minutos. Con Atentamente, nsvora |
|
||||
|
He intentado transmitir claramente: Usted no puede garantizar EXACTAMENTE cuánto tiempo es el sueño. Usted tendrá que añadir alguna vertiente (factor chapuza) en su segundo cálculo de una manera u otra, que no va a funcionar perfectamente cada vez - ejemplo se supone que han POSIX conforme el tiempo - es decir., no hay salto segundos.: Código:
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); tiempo de prueba después de despertar: Código:
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 También puede probar usleep (valor) que tiene en ms granularidad más fina, pero de nuevo es el valor mínimo. Se puede ser más largo. Por ejemplo, una mayor prioridad que este trabajo se está ejecutando. |
![]() |
| Marcadores |
| Herramientas de hilo | Buscar en este Hilo |
| Modos de visualización | Vota a este hilo |
|
|