Tôi tự hỏi nếu có một tương đương tăng của ManualResetEvent? Về cơ bản, tôi muốn có một nền tảng thực hiện ... Hoặc, ai đó có thể giúp tôi bắt chước chức năng của ManualResetEvent bằng cách sử dụng Boost :: thread? Thanks guysTăng tương đương với ManualResetEvent?
Trả lời
Thật dễ dàng để viết sự kiện đặt lại thủ công khi bạn có biến mutex và biến điều kiện.
Điều bạn cần là trường thể hiện sự kiện đặt lại của bạn có được báo hiệu hay không. Truy cập vào trường sẽ cần được bảo vệ bởi một mutex - điều này bao gồm cả cài đặt/đặt lại sự kiện của bạn cũng như kiểm tra xem liệu nó có được báo hiệu hay không.
Khi bạn đang chờ sự kiện của mình, nếu sự kiện hiện tại không được báo hiệu, bạn sẽ phải chờ một biến điều kiện cho đến khi nó được báo hiệu. Cuối cùng, trong mã của bạn để đặt sự kiện, bạn sẽ muốn thông báo biến điều kiện để đánh thức bất kỳ ai đang chờ sự kiện của bạn.
class manual_reset_event
{
public:
manual_reset_event(bool signaled = false)
: signaled_(signaled)
{
}
void set()
{
{
boost::lock_guard<boost::mutex> lock(m_);
signaled_ = true;
}
// Notify all because until the event is manually
// reset, all waiters should be able to see event signalling
cv_.notify_all();
}
void unset()
{
boost::lock_guard<boost::mutex> lock(m_);
signaled_ = false;
}
void wait()
{
boost::lock_guard<boost::mutex> lock(m_);
while (!signaled_)
{
cv_.wait(lock);
}
}
private:
boost::mutex m_;
boost::condition_variable cv_;
bool signaled_;
};
Tôi nghĩ bạn có thể cần sử dụng 'boost :: condition_variable_any' để làm việc này. Xem: http://stackoverflow.com/questions/8758353/whats-the-difference-between-stdcondition-variable-and-stdcondition-variable – Nick
Ngoài ra, điều kiện_variable_any :: phương thức chờ đợi phải được cung cấp mutex làm tham số, không phải là bảo vệ khóa. – Oliver
Hmm, tôi nhận được: lỗi C2664 'void boost :: condition_variable :: wait (boost :: unique_lock
IIRC, ManualResetEvent
s tồn tại để cho phép nhiều chủ đề chờ đợi trên một đối tượng và một chuỗi để đánh thức tại thời điểm đối tượng được báo hiệu. Phần "đặt lại thủ công" xuất phát từ thực tế là hệ thống không tự động đặt lại sự kiện sau khi nó đánh dấu một chuỗi; bạn làm điều đó thay thế.
này nghe có vẻ rất giống với condition variables:
Các mô hình sử dụng chung là một thread khóa một mutex và sau đó gọi
wait
trên một thể hiện củacondition_variable
hoặccondition_variable_any
. Khi luồng được đánh thức từ khi chờ, sau đó nó sẽ kiểm tra xem điều kiện thích hợp có đúng hay không và tiếp tục nếu như vậy. Nếu điều kiện là không đúng, sau đó các chủ đề sau đó gọiwait
một lần nữa để tiếp tục chờ đợi.
Về cơ bản, tôi chỉ có một luồng văn bản phải viết và không bao giờ bị chặn, trong khi tôi có một chuỗi trình đọc chỉ đọc được khi người viết không viết ... nếu điều đó có ý nghĩa. Cảm ơn – Polaris878
Tôi sẽ nói rằng thiết kế của bạn có ý nghĩa. –
- 1. Tăng tương đương với tiêu chuẩn :: async()
- 2. Có tương đương với tăng :: multi_index cho Java someplace không?
- 3. DoEvents tương đương với C++?
- 4. python tương đương với sed
- 5. Tương đương TreeSet của Java tương đương với Python?
- 6. python tương đương tương đương
- 7. MySQL tương đương với SEQUENCE.NEXTVAL Oracle
- 8. Python tương đương với Mclapply của R()
- 9. C# tương đương với shell_exec
- 10. WPF tương đương với TextRenderer
- 11. MSVC tương đương với __builtin_popcount?
- 12. Python tương đương với find2perl
- 13. Jackson tương đương với iPhone?
- 14. Double.doubleToLongBits tương đương với C#?
- 15. .net tương đương với htmlunit?
- 16. callgrind tương đương với java?
- 17. __LINE__ tương đương với Java?
- 18. find_by_sql tương đương với mongoid?
- 19. Video tương đương với PNG?
- 20. Mylyn tương đương với Netbeans?
- 21. Tương đương với Android java.awt.Dimension
- 22. AMD tương đương với NvOptimusEnablement
- 23. Java Tương đương với Reflection.Emit
- 24. Java tương đương với WPF
- 25. windows tương đương với inet_aton
- 26. Dreamweaver tương đương với Linux
- 27. MVC Tương đương với Page_Load
- 28. java tương đương với mkstemp
- 29. MDX tương đương với THÍCH
- 30. Python tương đương với Sinatra
Bạn muốn mô phỏng chức năng sự kiện nào? – curiousguy