2012-03-02 27 views
7

Tôi có phương pháp được kích hoạt sau mỗi 30 giây aprox. mà tôi cần phải có trong một chủ đề.khi tháo rời hoặc tham gia chủ đề tăng tốc?

Tôi có phương thức mà tôi có thể gọi từ bên ngoài lớp học. Một cái gì đó như callThreadedMethod() mà tạo ra các chủ đề mà chính nó gọi là threadedMethod cuối cùng.

Đây là những phương pháp của MyClass

void callThreadedMethod(){ 
    mThread = boost::shared_ptr<boost::thread>(new boost::thread(&MyClass::threadedMethod, this)); 
} 

void threadedMethod(){ 
    //more code NOT inside a while loop 
} 

Vì vậy, tôi phải tách mThread mỗi khi phương pháp này được gọi là?

Có đủ để gọi tham gia() trong trình phá hủy MyClass không?

Chủ đề có tự hủy chính nó khi threadedMethod kết thúc không?

Trả lời

13

Nó phụ thuộc vào những gì bạn muốn đạt được. Nếu bạn không quan tâm khi nào hoặc nếu các cuộc gọi đến số threadedMethod chấm dứt hoặc có ném hay không, thì bạn chỉ có thể detach chuỗi ngay khi bạn tạo; mỗi chủ đề sẽ bị hủy khi phương thức hoàn thành. Và bạn không nên lưu trữ chuỗi trong biến thành viên.

Nếu bạn quan tâm thì bạn cần gọi join trên mỗi chuỗi bạn tạo (một lần cho mỗi luồng, không phải một lần trong trình hủy). Tôi nghi ngờ bạn không.

Bạn có thực sự cần phải tạo một chuỗi mới cho mỗi cuộc gọi không? Tạo chủ đề có thể tốn kém, do đó, một giải pháp thay thế sẽ là sử dụng một nhóm luồng và gửi mỗi lời gọi threadedMethod đến đó. Các hồ bơi sau đó có thể có tuổi thọ của MyClass instance. Nhưng có lẽ đó là quá mức cần thiết cho một cái gì đó mà chỉ xảy ra một lần mỗi 30s.

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