2012-06-12 32 views
43

thể trùng lặp:
Start thread with member functionstd :: chủ đề của lớp

Tôi có một lớp học nhỏ:

class Test 
{ 
public: 
    void runMultiThread(); 
private: 
    int calculate(int from, int to); 
} 

Làm thế nào nó có thể chạy phương pháp calculate với hai differents bộ parametrs (ví dụ calculate(0,10), calculate(11,20)) trong hai luồng từ phương thức runMultiThread()?

PS Cảm ơn tôi đã quên rằng tôi cần vượt qua this làm thông số.

Trả lời

119

Không khó khăn như vậy:

#include <thread> 

void Test::runMultiThread() 
{ 
    std::thread t1(&Test::calculate, this, 0, 10); 
    std::thread t2(&Test::calculate, this, 11, 20); 
    t1.join(); 
    t2.join(); 
} 

Nếu kết quả của việc tính toán vẫn còn cần thiết, sử dụng một tương lai thay vì:

#include <future> 

void Test::runMultiThread() 
{ 
    auto f1 = std::async(&Test::calculate, this, 0, 10); 
    auto f2 = std::async(&Test::calculate, this, 11, 20); 

    auto res1 = f1.get(); 
    auto res2 = f2.get(); 
} 
+0

Tất cả các loại vấn đề với điều này. Tại sao các upvotes? Giá trị trả lại bị bỏ chọn. Có lẽ phương pháp tính toán lặp đi lặp lại trên một cái gì đó - là nó thread an toàn? – ravenspoint

+3

@ravenspoint: Cho dù đó là chủ đề an toàn có phải là OP hay không? Tôi đồng ý rằng giá trị trả về sẽ được phục hồi, mặc dù OP không chỉ ra rằng giá trị đó được dự định (nó có thể giống như 'printf'). 'std :: async' sẽ là một thay thế. –

+0

Đó là lý do tại sao tôi hỏi OP vấn đề gì anh tìm thấy, thay vì tát một nửa câu trả lời có thể sẽ làm cho OP càng thêm đau buồn. – ravenspoint

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