2013-12-19 121 views
0

我试图更改QNX 6.4.1中的线程名称,但线程继续在“pidin”列表中与父进程名称一起列出。新的线程名称不显示在pidin输出中

我已经创建线程:

iReturn = pthread_setname_np(NULL, "HappyThread"); 

我已阅读线程名回:

iReturn = pthread_getname_np(NULL, thread_name, 80); 

iReturn = pthread_create(&threadhandle, &attr, &CALzoneCommThread, this); 

我从线程本身内改名线程并且所有线程都通过printf语句验证返回名称“HappyThread”,但是当我执行一个pidin时,它们是sti将列出进程名称“testapp”。我需要一些帮助来确定我是否在上面的代码中做了错误的事情,或者如果我从根本上误解了pidin命令。 由于要求与传统实用程序很好地配合使用,线程必须具有名称以外的名称。

平台:QNX 6.4.1 语言:C

+0

你叫'pidin'还是'pidin threads'? –

+0

我不带参数地称'pidin'。 – ThreadBanger

+0

然后尝试'pidin threads'它可能会帮助你。没有参数,线索名称将不会显示,我认为。 –

回答

2

是的,你已经做了错误的代码,你误会了pidin命令的输出:

  1. 的行为你代码未指定,因为您传递NULL(将其转换为0)作为线程ID。 QNX从1开始编号,因此线程0未指定。实验表明,为TID传递0与传递1的行为相同,对于pthread_setname_np和pthread_getname_np都是如此。因此,您的代码正在设置并获取主线程的ID,而不是通过pthread_create()调用创建的线程的ID。你应该通过threadhandle作为设定的参数/ GET_NAME调用,实际上是指新创建的线程:

     
    iReturn = pthread_setname_np(threadhandle, "HappyThread"); 
    

  2. 不带任何参数pidin不显示线程名称通过pthread_setname_np()在所有设置。当没有参数调用时,pidin在第一列显示进程ID,在第二列显示线程ID(数字),在第三列显示进程名称(这就是您可能误解为线程名称的原因)。

  3. 你可以像上面提到的那样,用参数'threads'来调用pidin;这将在第三列中显示线程名称(如果已设置)或否则显示数字线程ID。另外,您也可以致电pidin相似,为了得到以下两个每个线程的数字和符号(如果可用)ID-S:

    pidin -faNbh

对于系统中的每个线程这将按顺序打印PID,进程名称,TID和线程名称。请参阅“使用pidin”了解它的工作原理。

+0

谢谢你的回答,特立独行。我按照你的建议修改了代码,一切都很好。 – ThreadBanger

+0

@ThreadBanger:很高兴听到。也许你可以接受答案呢? – maverick