我正在将一个先前的线程包装器转换为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抛出的异常取消.
我的问题是:
这种方法会有问题吗(除了不便携)?
解决方法
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。