2009-12-17 37 views
6

tôi sau một ví dụ rõ hơn về boost::asio::deadline_timerBetter tăng ASIO deadline_timer dụ

Các ví dụ được đưa sẽ luôn thời gian ra và gọi phương thức close. Tôi đã thử gọi cancel() trên bộ hẹn giờ nhưng điều đó làm cho hàm được chuyển thành async_wait để được gọi ngay lập tức.

Làm cách nào để làm việc đúng với bộ hẹn giờ trong ứng dụng khách không đồng bộ tcp?

+1

có lý do đằng sau hành vi này. Mọi cuộc gọi đến async_wait được ghép nối với trình xử lý hoàn tất. Việc hủy cuộc gọi không ảnh hưởng đến điều này. –

Trả lời

20

Bạn đề cập đến việc hủy cuộc gọi() trên bộ hẹn giờ làm cho hàm được chuyển đến async_wait để được gọi ngay lập tức. Đây là hành vi mong đợi nhưng hãy nhớ rằng bạn có thể kiểm tra lỗi được chuyển đến bộ xử lý hẹn giờ để xác định xem bộ hẹn giờ đã bị hủy hay chưa. Nếu bộ hẹn giờ bị hủy, operation_aborted sẽ được chuyển. Ví dụ:

void handleTimer(const boost::system::error_code& error) { 
    if (error == boost::asio::error::operation_aborted) { 
     std::cout << "Timer was canceled" << std::endl; 
    } 
    else if (error) { 
     std::cout << "Timer error: " << error.message() << std::endl; 
    } 
} 

Hy vọng điều này sẽ hữu ích. Nếu không, ví dụ cụ thể mà bạn đang tìm kiếm là gì?

+0

io_service.stop() có hủy hẹn giờ không? –

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