2011-08-16 41 views
14

Có ai có ví dụ về cách dễ dàng nhất sử dụng boost :: condition :: timed_wait? Có một số chủ đề về chủ đề here, herehere, nhưng không có chủ đề nào làm ví dụ. Và thúc đẩy doc là như bình thường khá thưa thớt.Ví dụ sử dụng boost :: condition :: timed_wait

+0

Điều này dường như được ghi lại trong việc tăng thời gian chờ trên biến điều kiện là rất phổ biến trong môi trường đa luồng. Bạn đang tìm kiếm trợ giúp cụ thể là gì? – Chad

+4

@Chad: Có lẽ tôi vừa bỏ qua tài liệu? Tất cả những gì tôi thấy là [ở đây] (http://www.boost.org/doc/libs/1_47_0/doc/html/thread/synchronization.html#thread.synchronization.condvar_ref). Điều đó chỉ chứa một mẫu không có thời gian, cụ thể là 'while (! Data_ready) {cond.wait (lock); } '. Đối với thời gian, nó chỉ nói _The quá tải thời gian của timed_wait là khó sử dụng một cách chính xác. Quá tải dùng một vị ngữ nên được ưa thích trong hầu hết các trường hợp._ Tôi không hiểu rằng mặc dù, cũng không phải đoạn mã này: 'while (! Pred()) {if (! Timed_wait (lock, abs_time)) {return pred(); }} trả về true; 'Pred() nghĩa là gì? – Cookie

Trả lời

19

Thực ra, cuối cùng tôi đã tìm thấy liên kết có ví dụ đầy đủ here. Với một chút thích ứng, điều này có vẻ là cuộc gọi.

boost::system_time const timeout=boost::get_system_time()+ boost::posix_time::milliseconds(35000); 
boost::mutex::scoped_lock lock(the_mutex); 
if(the_condition_variable.timed_wait(lock,timeout,&CondFulfilled)) 
{ 
    <cond fulfilled code> 
} 
else 
{ 
    <timeout code> 
} 
bool CondFulfilled() { ... } 
Các vấn đề liên quan