2012-03-27 55 views
22

Có bất kỳ điều gì giống như boost::thread_group trong C++ 11 không?boost :: thread_group trong C++ 11?

Tôi chỉ đang cố gắng chuyển chương trình của mình bằng cách sử dụng boost:thread thành chủ đề C++ 11 và không thể tìm thấy bất kỳ thứ gì tương đương.

+4

đề Boost và C++ 11 chủ đề khác nhau. Cá nhân tôi tiếp tục sử dụng các chủ đề tăng vì API hoàn chỉnh hơn (và thiếu việc thực hiện hiện tại ví dụ như lưu trữ cục bộ luồng). –

Trả lời

24

Không, không có gì trực tiếp tương đương với boost::thread_group trong C++ 11. Bạn có thể sử dụng std::vector<std::thread> nếu tất cả những gì bạn muốn là một vùng chứa. Sau đó, bạn có thể sử dụng cú pháp mới for hoặc std::for_each để gọi join() trên từng phần tử hoặc bất kỳ phần tử nào.

+4

Từ năm 2012 đã có một giải pháp tốt hơn cho vấn đề này? – pyCthon

+1

Tôi muốn thêm rằng thực sự không có phép thuật trong 'boost :: thread_group', nó nhiều hơn một chút so với một chuỗi các chủ đề (" ít hơn "là một số hàm tiện ích như' join_all' và 'create_thread'). –

5

thread_group không được đưa vào tiêu chuẩn C++ 11 và C++ 14.

Nhưng một workaround rất đơn giản:

std::vector<std::thread> grp; 

    // to create threads 
    grp.emplace_back(functor); // pass in the argument of std::thread() 

    void join_all() { 
    for (auto& thread : grp) 
     if (thread.joinable()) 
     thread.join(); 
    }