7

Có thể thực hiện chờ đợi không đồng bộ (đọc: không chặn) trên biến có điều kiện trong tăng :: asio không? nếu nó không được hỗ trợ trực tiếp, bất kỳ gợi ý nào về việc triển khai nó sẽ được đánh giá cao.tăng asio không đồng bộ chờ đợi trên biến điều kiện

Tôi có thể thực hiện hẹn giờ và kích hoạt báo thức ngay cả sau vài ms, nhưng đây là cách tiếp cận thấp hơn rất nhiều, tôi thấy khó tin rằng đồng bộ hóa biến điều kiện không được triển khai/ghi lại.

+0

bạn muốn làm gì ??? - có lẽ là phiên bản cuối cùng của [async_read_until] (http://www.boost.org/doc/libs/1_47_0/doc/html/boost_asio/reference/async_read_until.html) những gì bạn đang tìm kiếm? chờ đợi không chặn là bình thường một nhiệm vụ cho [boost thread] (http://www.boost.org/doc/libs/1_47_0/doc/html/thread.html) ... boost thread kết hợp với boost asio nên làm việc ... – jenseb

+0

Tôi có ý tưởng thực hiện thay thế, tôi đã phác thảo nó trong một câu hỏi khác ở đây. http://stackoverflow.com/questions/6776779/boost-asio-multi-io-service-rpc-framework-design-rfc Điều này có thể cung cấp cho bạn thông tin chi tiết hơn về những gì tôi muốn đạt được. –

Trả lời

7

Nếu tôi hiểu ý định đúng, bạn muốn khởi chạy trình xử lý sự kiện, khi một số biến điều kiện được báo hiệu, trong ngữ cảnh của nhóm chủ đề asio? Tôi nghĩ rằng nó sẽ là đủ để chờ đợi trên biến điều kiện trong đầu của xử lý, và io_service::post() chính nó trở lại trong hồ bơi cuối cùng, một cái gì đó của loại này:

#include <iostream> 
#include <boost/asio.hpp> 
#include <boost/thread.hpp> 
boost::asio::io_service io; 
boost::mutex mx; 
boost::condition_variable cv; 
void handler() 
{ 
    boost::unique_lock<boost::mutex> lk(mx); 
     cv.wait(lk); 
    std::cout << "handler awakened\n"; 
    io.post(handler); 
} 
void buzzer() 
{ 
    for(;;) 
    { 
     boost::this_thread::sleep(boost::posix_time::seconds(1)); 
     boost::lock_guard<boost::mutex> lk(mx); 
      cv.notify_all(); 
    } 
} 
int main() 
{ 
    io.post(handler); 
    boost::thread bt(buzzer); 
    io.run(); 
} 
+4

nhưng chuỗi chờ đợi sẽ bị chặn, không có cách nào để không chặn luồng, nhưng để đăng ký trình xử lý hoàn thành thay thế? Tôi hiện đang consdiering một cơ chế thay thế ở đây http://stackoverflow.com/questions/6776779/boost-asio-multi-io-service-rpc-framework-design-rfc –

+0

@Hassan Syed: biến điều kiện là một khái niệm liên quan đến một chuỗi bị chặn. Có lẽ bạn đang tìm kiếm các tín hiệu async thay thế? boost.asio vừa thêm hỗ trợ cho trình xử lý tín hiệu trong 1.47.0: http://www.boost.org/doc/libs/1_47_0/doc/html/boost_asio/history.html – Cubbi

+0

Theo như tôi có thể nói, đây là những tín hiệu được hệ điều hành phát ra. Nó cho thấy rằng bạn có thể đăng ký cho các tín hiệu này, nhưng nó là hệ điều hành sẽ phát ra chúng. –

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