TBB:如何获取当前任务区域?

问题描述 投票:0回答:1

我有一个小的调度程序观察器类

namespace
{
    class TestObserver : public tbb::task_scheduler_observer
    {
    public:
        TestObserver(tbb::task_arena& a) : tbb::task_scheduler_observer(a)
        {
            observe(true); // activate the observer
        }

        /*override*/ void on_scheduler_entry(bool worker)
        {
            // Do something here
            std::cout << "on_scheduler_entry: " << tbb::task_arena::current_thread_index() << std::endl;
        }

        /*override*/ void on_scheduler_exit(bool worker) 
        { 
            std::cout << "on_scheduler_exit: " << tbb::task_arena::current_thread_index() << std::endl;
        }
    };
}

而且我想用当前的任务舞台对其进行初始化。在我的主代码中,我这样初始化了TBB:

unsigned int numThreads = num_threads;
if (numThreads < 1) numThreads = tbb::task_scheduler_init::automatic;

tbb::task_scheduler_init init(numThreads);

TestObserver obs(...); // <-- fail!

我想用当前的任务舞台初始化观察者。虽然我没有明确初始化一个,但是TBB应该自动执行,对吧?

c++ tbb
1个回答
0
投票
如果没有构造显式的tbb::task_arena,则我不知道要检索对它的引用的机制,并且tbb::task_scheduler_observer的默认构造函数将在内部映射到隐式创建的竞技场。引用tbb::task_arena的构造函数旨在与用户创建的舞台一起使用。
最新问题
© www.soinside.com 2019 - 2025. All rights reserved.