Как установить имя отдельного потока в Poco, которое будет отображаться для отладки в трассировке ядра / ps / gdb? - PullRequest
2 голосов
/ 10 апреля 2019

Я недавно начал программировать с потоками и наткнулся на Poco и его ресурс потоков, когда запускал поток из Poco :: ThreadPool :: defaultPool (). Start (* testThread, "HappyThread") * и передать строку "HappyThread" при вызове метода запуска.

После того, как поток запущен и запущен, я ввел команду ps, чтобы получить имя потока, но он говорит "a.out".

vipin@VIPIN:~$ ps H -C a.out -o 'pid tid cmd comm'
PID   TID     CMD               COMMAND
14051 14051 ./a.out              a.out
14051 14052 ./a.out              a.out
14051 14053 ./a.out              a.out`

Принимая во внимание, что когда я использую pthread_setname_np (handle, "HappyThread"), вывод команды ps дает имя потока как "HappyThread", как показано ниже,

vipin@VIPIN:~$ ps H -C a.out -o 'pid tid cmd comm'
PID   TID    CMD                 COMMAND
14051 14051 ./a.out              a.out
14051 14052 ./a.out              HappyThread
14051 14053 ./a.out              a.out`

ниже приведен мой пример кода (не просто код ленивый):

test.cc:

#include "test.h"

void TestThread::run() {
    while (1)
    ;
}

test.h:

#include <Poco/Runnable.h>

class TestThread: public Poco::Runnable
{
    public:
    void run() override;
};

main.cc:

#include "test.h"
#include <Poco/ThreadPool.h>

using Poco::ThreadPool;

int main()

{
    TestThread thread_t;

    ThreadPool::defaultPool().start(thread_t, "HappyThread");
    while (1)
    ;

}

Насколько я посмотрел в документации по poco, передача строки в метод start устанавливает имя потока. Я даже пытался с классом Poco Thread и создал поток и вызвал метод setName, но наблюдал то же поведение

Любые предложения относительно того, почему такое поведение происходит с Poco, или нет способа установить имя с помощью методов Poco для отражения в ОС, помогут понять эту проблему и найти решение.

...