2010-07-13 27 views
5

Tôi cần thêm bộ hẹn giờ hỗ trợ trong một ứng dụng dựa trên I/O Completion Ports (IOCP). Tôi muốn tránh sử dụng một chuỗi cụ thể để quản lý bộ hẹn giờ.Bộ hẹn giờ hỗ trợ I/O chồng chéo (cho IOCP)?

Trên Linux, bạn có thể tạo bộ hẹn giờ cung cấp thông báo hết hạn thông qua bộ mô tả tệp (xem timerfd.h man), vì vậy thật tuyệt vời khi sử dụng nó với ví dụ epoll nếu ứng dụng của bạn dựa trên epoll.

Trên Windows, bạn có thể sử dụng "giờ waitable" với một thủ tục gọi không đồng bộ (ACP) (xem http://msdn.microsoft.com/en-us/library/ms686898(v=VS.85).aspx)

Nếu bạn quan tâm, kqueue (BSD, Mac OS) hỗ trợ tính giờ theo mặc định (xem EVFILT_TIMER) .

Với các cổng hoàn thành I/O, chúng tôi phải sử dụng các objets hỗ trợ I/O chồng lên nhau. Vì vậy, có một bộ đếm thời gian cho IOCP?

Trân trọng,

Cédrics

Trả lời

5

Theo như tôi biết không có giờ mà tạo ra một hoàn IOCP khi họ hết hạn.

Bạn có thể thử hàng đợi bộ đếm thời gian Windows; CreateTimerQueueTimer.

Tôi đã kết thúc viết hàng đợi hẹn giờ của riêng mình, sử dụng chuỗi phụ để chạy bộ hẹn giờ, vì vậy có thể không tốt cho bạn: Xem here cho một loạt bài viết mà tôi triển khai hàng đợi với TDD và kiểm tra đơn vị đầy đủ. Tôi đang trong quá trình thực hiện một TimerWheel hiệu suất cao hơn với cùng một giao diện, nhưng một lần nữa sẽ sử dụng một chủ đề bên ngoài để quản lý bộ hẹn giờ.

0

Bạn có thể sử dụng bộ đếm thời gian chờ và xếp hàng gói tùy chỉnh vào cổng hoàn thành bằng cách sử dụng "PostQueuedCompletionStatus". Nhưng hãy nhớ rằng nếu có nhiều luồng công nhân thì chỉ một trong các chuỗi sẽ được thông báo.

Các vấn đề liên quan