Создание потока через библиотеку TBB

У меня есть такой код:

    #include <iostream>
    #include <tbb/tbb.h>
    #include <Windows.h>



    bool MyThread(int something)
    {
        std::cout << "This is a thread function\n" << std::endl;

        for (int i = 0; i < 10000; i++)
        {
            something++;
            Sleep(1);
        }

        return true;
    }

    int main ()
    {
        tbb::tbb_thread pMyThread = tbb::tbb_thread(MyThread, 3);

        pMyThread.join();

        return 0;
    }

Но если я скомпилирую его в VS 2008, он покажет: ошибка C2248: 'tbb::internal::tbb_thread_v3::tbb_thread_v3': невозможно получить доступ к частному члену, объявленному в классе 'tbb::internal::tbb_thread_v3'

для первой строки функции main(). Где я не прав?


person Nabijon    schedule 11.10.2012    source источник
comment
Большинство объектов потока, будь то tbb или c++11, не могут быть скопированы или назначены. Вы кодируете вызов ненужного оператора присваивания, который является закрытым, чтобы вы не делали именно это. Однако поток С++ 11 подвижен. Не уверен, что это случай tbb   -  person Yan Zhou    schedule 11.10.2012
comment
я считаю, что тот, что в tbb\compat, подвижен, однако он использует vs2008, у которого нет поддержки rvalue.   -  person Rick    schedule 12.10.2012


Ответы (1)


Вероятно, это вызов конструктора копирования, когда этого не должно быть, попробуйте вместо этого:

tbb::tbb_thread myThread(MyThread, 3); 

Если вы можете, вам также следует рассмотреть возможность использования std::thread, который находится в заголовке.

person Rick    schedule 11.10.2012
comment
Зачем использовать std::thread, если вопрос связан с TBB? Я оцениваю TBB для целей производительности, и мне интересно сравнить его с std::threads - person Patrizio Bertoni; 10.03.2016