Я недавно начал программировать с потоками и наткнулся на 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 для отражения в ОС, помогут понять эту проблему и найти решение.