2009-12-21 7 views
9

Tôi muốn cung cấp toàn cầu io_service được thúc đẩy bởi một chuỗi toàn cầu. Đủ đơn giản, tôi chỉ có cuộc gọi cơ thể chủ đề io_service::run(). Tuy nhiên, điều đó không hoạt động như run (run_one, poll, poll_one) trả lại nếu không có việc phải làm. Nhưng, nếu chuỗi liên tục gọi run(), nó sẽ bận lặp khi không có gì để làm.chuỗi chuyên dụng cho io_service :: run()

Tôi đang tìm cách chặn chuỗi để không có bất kỳ công việc nào được thực hiện trong io_service. Tôi có thể thêm sự kiện toàn cầu vào danh sách kết hợp để chặn. Tuy nhiên, điều đó sẽ yêu cầu người dùng của io_service thông báo cho sự kiện mỗi khi họ sử dụng dịch vụ. Không phải là giải pháp lý tưởng.

Lưu ý: không có hình cầu thực tế và tôi không bao giờ sử dụng sự kiện cho đồng thời tôi chỉ đơn giản hóa vấn đề theo nhu cầu chính xác của tôi. Mục tiêu thực sự là một lớp con asio::deadline_timer không yêu cầu tham số io_service làm thông số xây dựng.

Trả lời

21

Bạn cần tạo đối tượng io_service::work.

Xem phần này của tài liệu:

Stopping the io_service from running out of work

+0

Không biết về việc này. +1 và đã xóa đề xuất hack-ishy của tôi. –

+0

cảm ơn, tôi đã bắt đầu làm hẹn giờ với thời gian chờ vô hạn chỉ dành cho mục đích này. Tôi vô cùng ấn tượng với asio. Họ đã bỏ lỡ rất ít trường hợp góc. –