2010-07-13 8 views
5

Devo aggiungere il supporto per i timer in un'applicazione basata su I/O Completion Ports (IOCP). Vorrei evitare l'uso di un thread specifico per gestire i timer.Timer che supporta I/O sovrapposti (per IOCP)?

Su Linux, è possibile creare un timer che invii notifiche di scadenza tramite un descrittore di file (vedere timerfd.h man), quindi è fantastico utilizzarlo per esempio con epoll se l'applicazione è basata su epoll.

In Windows, è possibile utilizzare "timer waitable" con una procedura chiamata asincrona (ACP) (vedi http://msdn.microsoft.com/en-us/library/ms686898(v=VS.85).aspx)

Se siete interessati, kqueue (BSD, Mac OS) supporta i timer di default (vedi EVFILT_TIMER) .

Con le porte di completamento I/O, dobbiamo utilizzare gli oggetti che supportano l'I/O sovrapposto. Quindi, c'è un tale timer per IOCP?

Con i migliori saluti,

Cedrics

risposta

5

Per quanto ne so non ci sono timer che generano un completamento IOCP quando scadono.

Si potrebbe provare la coda timer di Windows; CreateTimerQueueTimer.

ho finito per scrivere la mia coda di timer che fa uso di un filo in più per eseguire i timer, quindi è probabilmente non va bene per voi: Vedere here per una serie di articoli in cui ho implementare la coda con TDD e unit test completi. Sono in procinto di implementare un TimerWheel con prestazioni superiori con la stessa interfaccia, ma ancora una volta utilizzerò un thread esterno per gestire i timer.

0

È possibile utilizzare timer attendibili e mettere in coda un pacchetto personalizzato sulla porta di completamento utilizzando "PostQueuedCompletionStatus". Ma ricorda che se ci sono più thread di lavoro, verrà notificato solo uno dei thread.