Tôi mới tham gia chương trình tăng cường và tôi đã tìm kiếm lý do để sử dụng io_service::work
, nhưng tôi không thể tìm ra; trong một số thử nghiệm của tôi, tôi đã xóa nó và hoạt động tiền phạt.Tại sao tôi nên sử dụng io_service :: work?
Trả lời
io_service::run()
sẽ chạy các hoạt động miễn là có các hoạt động không đồng bộ để thực hiện. Nếu, bất cứ lúc nào, không có hoạt động không đồng bộ nào đang chờ xử lý (hoặc các trình xử lý được gọi), cuộc gọi run()
sẽ trở lại.
Tuy nhiên, có một số thiết kế muốn rằng cuộc gọi run()
không thoát cho đến khi tất cả công việc được thực hiện VÀ io_service
đã được hướng dẫn rõ ràng rằng bạn không thể thoát. Đó là những gì io_service::work
được sử dụng cho. Bằng cách tạo đối tượng work
(tôi thường làm điều đó trên heap và shared_ptr), io_service coi mình luôn có thứ gì đó đang chờ xử lý và do đó phương thức run()
sẽ không trả lại. Một khi tôi muốn dịch vụ có thể thoát ra (thường là trong lúc tắt máy), tôi sẽ phá hủy đối tượng công việc.
io_service::work
là lớp cơ sở của tất cả các công trình đó có thể được đưa lên một thể hiện của io_service
, ví dụ như khi bạn đang làm việc với một ổ cắm và bắt đầu một đọc không đồng bộ, thực sự bạn đang thêm một work
đến io_service
. Vì vậy, bạn thường không bao giờ sử dụng trực tiếp work
, nhưng có một ngoại lệ cho điều này:
sẽ trả lại ngay sau khi không còn việc gì để làm, vì vậy hãy xem xét một ứng dụng có một số nhà sản xuất và chủ đề người tiêu dùng và gửi chúng đến chủ đề tiêu dùng với io_service::post
, nhưng nếu tất cả công việc đã hoàn thành, thì io_service::run
sẽ trả về và có thể chuỗi khách hàng của bạn sẽ bị dừng lại, vì vậy bạn cần một công việc tùy ý để giữ io_service
bận rộn, trong trường hợp này bạn có thể sử dụng trực tiếp io_service::work
.
- 1. (Tại sao) tôi nên sử dụng obfuscation?
- 2. Tại sao tôi nên sử dụng Socket.io?
- 3. Tại sao tôi nên sử dụng glBindAttribLocation?
- 4. Tại sao tôi nên tránh sử dụng Dispatcher?
- 5. Tại sao tôi nên sử dụng 'áp dụng' trong Clojure?
- 6. Tại sao không nên sử dụng attach() trong R, và tôi nên sử dụng cái gì?
- 7. EF4.1 POCO: Tại sao tôi nên sử dụng ICollection
- 8. Tại sao tôi nên sử dụng lệnh GO trong Sybase?
- 9. Tại sao tôi không nên sử dụng System.out.println() trong android
- 10. Tôi có nên sử dụng FxCop và tại sao không?
- 11. Tại sao tôi KHÔNG nên sử dụng GAC?
- 12. Tại sao tôi không nên sử dụng Tự động?
- 13. Tại sao tôi nên sử dụng WCF với MVC?
- 14. Tại sao tôi nên sử dụng Doctrine trên Zend_Db?
- 15. Tại sao tôi nên sử dụng std :: async?
- 16. Tại sao tôi nên sử dụng @ Url.Content ("~/blah-blah-blah")?
- 17. Tại sao tôi nên sử dụng lối ra chọn?
- 18. Tại sao tôi nên sử dụng Spring Android?
- 19. Tại sao tôi không nên sử dụng UNIVERSAL :: isa?
- 20. include() Tại sao tôi không nên sử dụng?
- 21. boost :: asio :: io_service - tại sao sử dụng chức năng đăng bài?
- 22. Tại sao nên sử dụng Sự kiện?
- 23. Tại sao nên sử dụng Hibernate/nHibernate?
- 24. Tại sao nên sử dụng scala.collection.immutable.Stack
- 25. io_service, tại sao và nó được sử dụng như thế nào?
- 26. Tại sao tôi không nên sử dụng ID kiểu bằng cách sử dụng CSS?
- 27. Tại sao tôi nên sử dụng BBCode nhưng không sử dụng HTML ở dạng bình luận?
- 28. Tại sao tôi nên học COM?
- 29. Tại sao tôi nên sử dụng WndProc khi tôi có sự kiện biểu mẫu?
- 30. Khi nào/Tại sao tôi không nên sử dụng IsReference = true trên DataContracts của tôi?
Tiêu hủy như sử dụng đặt lại()? – lucastamoios
Thông thường, nếu tôi sử dụng shared_ptr để làm việc, thì có, tôi gọi 'reset()' trên shared_ptr. –