2010-07-13 11 views
5

tengo que añadir el apoyo temporizadores en una aplicación basada en E/S puertos de finalización (IOCP). Me gustaría evitar el uso de un hilo específico para administrar temporizadores.Temporizador que admite E/S superpuestas (para IOCP)?

En Linux, puede crear un temporizador que entregue notificaciones de caducidad mediante un descriptor de archivo (consulte timerfd.h man), por lo que es genial usarlo, por ejemplo, con epoll si su aplicación se basa en epoll.

En Windows, puede utilizar "temporizadores temporizador" con una llamada a procedimiento asincrónico (ACP) (ver http://msdn.microsoft.com/en-us/library/ms686898(v=VS.85).aspx)

Si usted está interesado, kqueue (BSD, Mac OS) soporta temporizadores por defecto (ver EVFILT_TIMER) .

Con I/O Puertos de terminación, que tienen que utilizar objetos que admiten la E/S superpuesta. Entonces, ¿hay tal temporizador para IOCP?

Saludos,

Cedrics

Respuesta

5

Por lo que yo sé no hay temporizadores que generan una terminación IOCP cuando expiran.

Usted podría intentar la cola del temporizador de Windows; CreateTimerQueueTimer.

Terminé escribiendo mi propia cola de temporizador que usa un hilo adicional para ejecutar los temporizadores, por lo que probablemente no sea bueno para ti: mira here para una serie de artículos donde implemento la cola con TDD y pruebas de unidades completas. Estoy en el proceso de implementar un TimerWheel mayor rendimiento con la misma interfaz, pero una vez más que va a utilizar una rosca externa para gestionar los temporizadores.

0

Se puede usar temporizadores temporizador y la cola de un paquete personalizado al puerto de finalización utilizando "PostQueuedCompletionStatus". Pero recuerde que si hay múltiples hilos de trabajo, solo se notificará uno de ellos.

Cuestiones relacionadas