我有一个小的调度程序观察器类
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应该自动执行,对吧?
tbb::task_arena
,则我不知道要检索对它的引用的机制,并且tbb::task_scheduler_observer
的默认构造函数将在内部映射到隐式创建的竞技场。引用tbb::task_arena
的构造函数旨在与用户创建的舞台一起使用。