C++11启动线程时怎么给线程分配名字?

bandaoyu 2021-09-22 16:07:32

给线程取名字 主要是为了在用工具查看线程工作情况,比如,我给一个线程取名“myThreadName”

top -H -p 2117993 #查看 进程2117993 的线程,就能轻松的看“myThreadName”

------------------------------------

我C++11启动线程的函数的方式是:

t = std::thread(myfun,this)

请问thread(myfun,this)是否还可以加参数,给这个线程分配名字?比如这样:

t = std::thread(myfun,this,“myThreadName”) 给这个线程取名为:myThreadName”

C有pthread_setname_np 可以设置线程名,但是总觉得不太方便。C++11 能不能创建线程的时候顺便就给线程命名?

 

...全文
2326 5 打赏 收藏 转发到动态 举报
写回复
用AI写文章
5 条回复
切换为时间正序
请发表友善的回复…
发表回复
yshuise 2021-10-01
  • 打赏
  • 举报
回复

#include
#include

/* run this program using the console pauser or add your own getch, system("pause") or input loop */

class A
{
public:
A() {}
void test() { std::cout << "hello,world! "<< std::endl; }

void ction() {
    std::thread([this]() {test(); }).join();

}

};

int main(int argc, char** argv) {

A a;
a.ction();


return 0;

}

flying_music 2021-09-23
  • 打赏
  • 举报
回复 3

网上的言论:c++ 中的线程库std::thread所提供的线程控制能力非常有限, 线程创建完成后即开始运行,只提供了joinable,join,detach, 为了弥补这个不足,c++ 提供了一个std::thread::native_handle() 函数来获取与特性线程库实现相关的handle,以此来提供更多线程控制能力。
总结:还是得用pthread_setname_np(t.native_handle(), "myThreadName")

sdghchj 2021-09-23
  • 打赏
  • 举报
回复

线程没有名字,但线程所执行的入口函数的参数是由你自己定义的,可以多个参数。

void print(const char* name,int a){
    cout<<name<<a<<endl;
}


int main()
{
    std::thread a(print,"aaa",1);
    a.join();
    return 0;
}

ztenv 版主 2021-09-23
  • 打赏
  • 举报
回复

我字会重复的,用id,另外遇到此类问题可以查看cppreference.com

heraldww 2021-09-22
  • 打赏
  • 举报
回复

不可以,但是thread 有id的。可以通过这个id来分这个thread

65,176

社区成员

发帖
与我相关
我的任务
社区描述
C++ 语言相关问题讨论,技术干货分享,前沿动态等
c++ 技术论坛(原bbs)
社区管理员
  • C++ 语言社区
  • encoderlee
  • paschen
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
  1. 请不要发布与C++技术无关的贴子
  2. 请不要发布与技术无关的招聘、广告的帖子
  3. 请尽可能的描述清楚你的问题,如果涉及到代码请尽可能的格式化一下

试试用AI创作助手写篇文章吧