Как проверить приоритет потоков в процессе, используя top или htop - PullRequest
0 голосов
/ 12 февраля 2020

Я пытаюсь установить приоритет потоков, используя потоки poco и API пула потоков. но когда я пытаюсь запустить программу и пытаюсь увидеть установленный приоритет с помощью htop, он всегда показывает 20. Кроме того, в терминале мин. и МАКС. приоритет печатаются как 0, так как я добавил коуты для печати того же самого. Я запускаю программу на основе Ubuntu 16 Linux. Будем благодарны за любую помощь или предложение.

По сути, я хочу увеличить приоритет нескольких потоков. Я использовал poco TaskManager, но он не предоставляет механизм для установки приоритета. поэтому я пытаюсь использовать потоки Poco, чтобы сделать то же самое, но это также не помогает.

    #include <Poco/Runnable.h>
    #include <Poco/Thread.h>
    #include <Poco/ThreadPool.h>
    #include <Poco/ThreadTarget.h>
    #include <Poco/RunnableAdapter.h>

    #include <string>
    #include <iostream>

    class Foo : public Poco::Runnable
    {
    public:
        virtual void run()
        {
            std::cout << "  run() start" << std::endl;
            Poco::Thread *t = Poco::Thread::current();
            int pmax = t->getMaxOSPriority();
            int pmin = t->getMinOSPriority();
            cout << "T1 priority " << t->getOSPriority()  << " min " << pmin << " max " << pmax << endl;
            t->setOSPriority(pmax);
            cout << "T1 priority " << t->getOSPriority() << endl;
            cout << "T1 priority " << t->getPriority() << endl;
            Poco::Thread::sleep(200);
            std::cout << "  run() end" << std::endl;
        }


    };

    int main()
    {
        // setting priority Using threadpool 
        Poco::ThreadPool::defaultPool().addCapacity(16);

        Foo foo;
        Poco::ThreadPool::defaultPool().startWithPriority(Poco::Thread::Priority::PRIO_LOW, foo);
        Poco::ThreadPool::defaultPool().joinAll();

        // setting priority Using thread 
        Poco::Thread thread;
        thread.start(foo);
        thread.join();

        return 0;
    }
...