我正在将一个先前的线程包装器转换为pthreads到std :: thread.
但是c 11没有任何方法可以取消该线程.尽管如此,我要求取消线程,因为它们可能在外部库中执行非常冗长的任务.
但是c 11没有任何方法可以取消该线程.尽管如此,我要求取消线程,因为它们可能在外部库中执行非常冗长的任务.
我正在考虑使用native_handle,它在我的平台上给了我pthread_id.我在Linux中使用gcc 4.7(Ubuntu 12.10).这个想法是:
#include <iostream> #include <thread> #include <chrono> using namespace std; int main(int argc,char **argv) { cout << "Hello,world!" << endl; auto lambda = []() { cout << "ID: "<<pthread_self() <<endl; while (true) { cout << "Hello" << endl; this_thread::sleep_for(chrono::seconds(2)); } }; pthread_t id; { std::thread th(lambda); this_thread::sleep_for(chrono::seconds(1)); id = th.native_handle(); cout << id << endl; th.detach(); } cout << "cancelling ID: "<< id << endl; pthread_cancel(id); cout << "cancelled: "<< id << endl; return 0; }
该线程被pthreads抛出的异常取消.
我的问题是:
这种方法会有问题吗(除了不便携)?