2011-11-28 20 views
5

Tôi đang cố gắng để có một lớp rằng khi tạo ra, bắt đầu một sợi nền, tương tự như dưới đây:boost :: chủ đề trong một lớp

class Test 
{ 
    boost::thread thread_; 
    void Process() 
    { 
    ... 
    } 

    public: 
    Test() 
    { 
     thread_ = boost::thread(Process); 
    } 
} 

tôi không thể có được nó để biên dịch, lỗi là "Không có chức năng phù hợp cho cuộc gọi để tăng :: thread :: thread (loại chức năng chưa được giải quyết)". Khi tôi làm điều này bên ngoài một lớp, nó hoạt động tốt. Làm thế nào tôi có thể có được con trỏ chức năng để làm việc?

Trả lời

6

Bạn nên khởi thread_ như:

Test() 
    : thread_(<initialization here, see below>) 
{ 
} 

Process là thành viên không tĩnh phương pháp của lớp Test. Bạn có thể:

  • tuyên bố Process là tĩnh.
  • ràng buộc một cá thể Kiểm tra để gọi Process vào.

Nếu bạn khai báo Process như tĩnh, initializer chỉ nên

&Test::Process 

Nếu không, bạn có thể gắn một thể hiện của Test sử dụng Boost.Bind:

boost::bind(&Test::Process, this) 
0

Đặt làm phương thức Process bạn tĩnh:

static void Process() 
    { 
    ... 
    } 
4

Vấn đề là bạn muốn khởi tạo boost :: thread với một con trỏ đến một hàm thành viên.

Bạn sẽ cần:

Test() 
    :thread_(boost::bind(&Test::Process, this)); 
{ 

} 

Cũng question này có thể rất hữu ích.

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