2012-06-15 44 views
13

thể trùng lặp:
Start thread with member functionĐi qua chức năng thành viên để std :: chủ đề

Gần đây tôi đã được chơi đùa với các thư viện mới std :: chủ đề trong C++ 11 và tôi gặp một vấn đề. Khi tôi cố gắng để vượt qua một chức năng lớp học thành một chuỗi mới, nó mang lại cho tôi một lỗi (Tôi không có văn bản báo lỗi chính xác ngay bây giờ kể từ khi im xa nhà) Tôi đã có một lớp như thế này

class A 
{ 
    void FunctA(); 
    void FunctB(); 

    void run() 
    { 
     std::thread t(FunctA); 
     std::thread r(FunctB); 
    } 
} 

gì am Tôi làm sai?

+1

có u cố gắng làm FunctA/FunctB tĩnh? –

Trả lời

26
class A 
{ 
    void FunctA(); 
    void FunctB(); 

    void run() 
    { 
     std::thread t(&A::FunctA, this); 
     std::thread r(&A::FunctB, this); 
    } 
}; 

Con trỏ đến chức năng thành viên khác với con trỏ đến hàm, cú pháp gọi chúng khác nhau, và yêu cầu thể hiện của lớp. Bạn chỉ có thể truyền con trỏ tới ví dụ như đối số thứ hai của hàm tạo std::thread.

+1

nếu họ có args thì sao? làm thế nào bạn sẽ vượt qua chúng? – kdubs

+0

@kdubs: ... như các đối số khác cho cuộc gọi hàm tạo. Vui lòng đọc tài liệu trong tương lai. – Griwes

+0

Mã này không thành công! ngay cả khi bạn thêm từ khóa 'công khai' .. –

0

Tôi nghĩ rằng, vấn đề là bạn không thể lấy con trỏ đến hàm thành viên theo cách tương tự như hàm. Here bạn sẽ tìm thấy thêm thông tin về điều này.

Ngoài ra, sẽ dễ dàng hơn để trả lời, nếu bạn cung cấp văn bản lỗi trình biên dịch.

2
class A 
{ 
    public: 
    A(FunctA &fa) : fa(fa) {} 

    struct FunctA 
    { 
     virtual void operator()() = 0; 
    } 
    struct FunctB 
    { 
     void operator()() 
     { 
     // thread B 
     } 
    } 
    FunctA &fa; 
    FunctB fb; 

    void run() 
    { 
     std::thread t(fa); 
     std::thread r(fb); 
    } 
} 

boost documentation

+0

Thật ngu ngốc. Như trong: không thông minh. – Griwes

+0

@Griwes: Đó là không cần thiết tiết lộ, nhưng nó _would_ làm việc, vì vậy tôi không nghĩ rằng nó đảm bảo một downvote. – ildjarn

+3

@ildjarn, phải, có thể không đáng để ý, nhưng vẫn câm. – Griwes

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