这仅仅是为了我的知识,它仅针对 Linux平台(不需要是可移植的).
我可以像这样在线程中获取linux Thread ID:
#include <iostream>#include <thread>#include <unistd.h>#include <sys/syscall.h>#include <sys/types.h>voID SayHello(){ std::cout << "Hello ! my ID is " << (long int)syscall(SYS_gettID) << std::endl;}int main (int argc,char *argv[]){ std::thread t1(&SayHello); t1.join(); return 0;}
但是如何在主循环中检索相同的ID?我没有找到使用std :: thread :: native_handle的方法.我相信它有可能通过pID_t gettID(voID)得到它;因为c 11的实现依赖于pthreads,但我一定是错的.
有什么建议吗?
谢谢.
std::mutex m;std::map<std::thread::ID,pID_t> threads;voID add_tID_mapPing(){ std::lock_guard<std::mutex> l(m); threads[std::this_thread::get_ID()] = syscall(SYS_gettID);}voID wrap(voID (*f)()){ add_tID_mapPing(); f();}
然后创建你的线程:
std::thread t1(&wrap,&SayHello);
然后通过以下方式获取ID:
pID_t tID = 0;while (tID == 0){ std::lock_guard<std::mutex> l(m); if (threads.count(t1.get_ID())) tID = threads[t1.get_ID()];}总结
以上是内存溢出为你收集整理的c – 如何获得std :: thread()的Linux线程ID全部内容,希望文章能够帮你解决c – 如何获得std :: thread()的Linux线程ID所遇到的程序开发问题。
如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)