Tôi hiện đang phát triển một chương trình cần tải xuống một số hình ảnh từ máy chủ socket và công việc tải xuống sẽ thực thi trong một thời gian dài. Vì vậy, tôi tạo một std::thread
mới để làm điều đó.Làm thế nào để chấm dứt một std :: thread?
Sau khi tải xuống, std::thread
sẽ gọi chức năng thành viên của Lớp hiện tại, nhưng Lớp này có thể đã được phát hành. Vì vậy, tôi có một ngoại lệ.
Cách giải quyết vấn đề này?
void xxx::fun1()
{
...
}
void xxx::downloadImg()
{
...a long time
if(downloadComplete)
{
this->fun1();
}
}
void xxx::mainProcees()
{
std::thread* th = new thread(mem_fn(&xxx::downloadImg),this);
th->detach();
//if I use th->join(),the UI will be obstructed
}
Chào mừng bạn đến với Stack Overflow! Tôi đã chỉnh sửa câu hỏi của bạn theo như tôi có thể đoán được vấn đề của bạn. Tuy nhiên, hãy thêm giải thích về mã và mô tả để nhiều người có kiến thức về chủ đề sẽ thấy nó. Vui lòng chỉnh sửa trong thông báo lỗi cụ thể mà bạn đang gặp phải trong trường hợp cần thiết để xác định vấn đề cụ thể. Chúc may mắn! – manetsus
Tại sao bạn không sử dụng 'std :: future'? –
Superlokkus
Có thể trùng lặp của [C++ 0x thread interruption] (http://stackoverflow.com/questions/2790346/c0x-thread-interruption) – kfsone