2010-07-13 9 views
5

Ich brauche Timer Unterstützung in einer Anwendung auf I/O Completion Ports (IOCP) basierend hinzuzufügen. Ich möchte die Verwendung eines bestimmten Threads zur Verwaltung von Timern vermeiden.Timer, der überlappende I/O (für IOCP) unterstützt?

Unter Linux können Sie einen Timer erstellen, der Ablaufbenachrichtigungen über einen Dateideskriptor liefert (siehe timerfd.h man). Es ist also großartig, ihn beispielsweise mit epoll zu verwenden, wenn Ihre Anwendung auf epoll basiert.

Unter Windows können Sie "wartbar Timer" mit einem asynchronen Prozeduraufruf (ACP) (siehe http://msdn.microsoft.com/en-us/library/ms686898(v=VS.85).aspx)

Wenn Sie interessiert sind, kqueue (BSD, Mac OS) unterstützt Timer standardmäßig (siehe EVFILT_TIMER) .

Mit I/O Completion Ports, haben wir objets zu verwenden, die I/O überlappt unterstützen. Also, gibt es einen solchen Timer für IOCP?

Mit freundlichen Grüßen,

Cédrics

Antwort

5

Soweit ich weiß, gibt es keine Timer, die einen IOCP Abschluss erzeugen, wenn sie ablaufen.

Sie können die Windows-Timer Warteschlange versuchen; CreateTimerQueueTimer.

Ich schrieb meine eigene Timer-Warteschlange, die einen zusätzlichen Thread verwendet, um die Timer auszuführen, also ist es wahrscheinlich nicht gut für Sie: Siehe here für eine Reihe von Artikeln, wo ich die Warteschlange mit TDD und vollständigen Komponententests implementieren. Ich bin in dem Prozess eine höhere Leistung TimerWheel mit der gleichen Schnittstelle zu implementieren, aber auch hier, dass wird ein Außengewinde verwenden, um die Timer zu verwalten.

0

könnten Sie wartbar Timer verwenden und ein benutzerdefiniertes Pakets an dem Completion-Port-Warteschlange mit „PostQueuedCompletionStatus“. Beachten Sie jedoch, dass bei mehreren Worker-Threads nur einer der Threads benachrichtigt wird.