2017-07-26 9 views
0

私はマルチスレッドのCアプリケーションを持っています。スレッド名を設定してhtopなどのツールに表示したいと考えています。p_threadはhtopに表示されないスレッド名を設定します

私はスレッド

pthread_create(&q->threads[i].thread, NULL, worker, &q->threads[i]); 
//q->threads[i].thread is a pthread_t object, 
//and q->threads[i] is the arg passed to worker. 

を作成していると私は、コードを実行すると、ワーカー機能では、私は、私は私の労働者のそれぞれについて、

The name to be set is worker-1 
setname returned 0 
Get name returned 0 and shows the name is 'worker-1' 

pthread_t self = pthread_self(); 
snprintf(name, 16, "worker-%d", data->id); 
printf("The name to be set is %s\n", name); 
int res = pthread_setname_np(self, name); 
printf("setname returned %d\n", res); 
char thread_name[16]; 
res = pthread_getname_np(self, thread_name, 16); 
printf("Get name returned %d and shows the name is '%s'\n", res, thread_name); 

を取得していますスレッド(名前はworker-Xの形式)

しかし、結果をhtopで表示すると(スレッドツリーを表示するようにhtopが設定されています)、すべてのスレッドが親プログラム名で表示されます。

どこにでもスレッド名を参照するコードはありません。そのため、リセットされている場所がわかりません。私も/ proc/{PID}を見て、スレッド名が間違って設定されています。だから、それは私のコードの問題だと思うが、私はそれを理解することはできない。

私はUbuntu 16を使用しています。私はCMakeも使用していますが、それとは関係ないと思います。

+0

'htop's"カスタムスレッド名を表示する "オプションを有効にしましたか?また、「すべてのリフレッシュ時にプロセス名を更新する」可能性がありますか? – twalberg

答えて

0

私はそれを理解しました。私はhtopでフィルターを持っていました。それは私の名前付きスレッドを隠していました。そのフィルタを削除すると、それが示されました。

関連する問題