65,176
社区成员




给线程取名字 主要是为了在用工具查看线程工作情况,比如,我给一个线程取名“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 能不能创建线程的时候顺便就给线程命名?
#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;
}
网上的言论:c++ 中的线程库std::thread所提供的线程控制能力非常有限, 线程创建完成后即开始运行,只提供了joinable,join,detach, 为了弥补这个不足,c++ 提供了一个std::thread::native_handle() 函数来获取与特性线程库实现相关的handle,以此来提供更多线程控制能力。
总结:还是得用pthread_setname_np(t.native_handle(), "myThreadName")
线程没有名字,但线程所执行的入口函数的参数是由你自己定义的,可以多个参数。
void print(const char* name,int a){
cout<<name<<a<<endl;
}
int main()
{
std::thread a(print,"aaa",1);
a.join();
return 0;
}
我字会重复的,用id,另外遇到此类问题可以查看cppreference.com
不可以,但是thread 有id的。可以通过这个id来分这个thread