2015-11-18 2 views
1

Я получаю сообщение об ошибке Я понятия не имею, как реагировать. Я пытаюсь получить значения из вектора будущих объектов, а затем вывести их, но у меня возникают проблемы с подтверждением того, извлекаю ли значения.получение значений из массива будущих объектов, std :: vector

Код:

std::vector<std::future<double>> threadResults; 
    int numThreads = 4; 
    double output; 
    for (int j=0; j<numThreads; j++) { 
    threadResults.push_back(std::async(launch::async, someCalculation, array1, array2, dimension)); 
    } 
    for (auto& fut : threadResults) { 
    auto output = fut.get(); 

    } 

Я новичок в использовании std::vector, так что я не уверен в том, как использовать get() с ним. Некоторые исследования привели меня к нижней петле, и я не уверен, что она работает. Если кто-либо увидит какие-либо очевидные ошибки, сообщите мне, но моя главная проблема заключается в том, как правильно использовать std::vector с классом future.

Вот мое сообщение об ошибке:

/tmp/ccQ19btT.o: In function `std::thread::thread<std::__future_base::_Async_state_impl<std::_Bind_simple<double (*(double*, double*, double*, int))(double*, double*, double*, int)>, double>::_Async_state_impl(std::_Bind_simple<double (*(double*, double*, double*, int))(double*, double*, double*, int)>&&)::{lambda()#1}>(std::__future_base::_Async_state_impl<std::_Bind_simple<double (*(double*, double*, double*, int))(double*, double*, double*, int)>, double>::_Async_state_impl(std::_Bind_simple<double (*(double*, double*, double*, int))(double*, double*, double*, int)>&&)::{lambda()#1}&&)': 
nonOptimizedNonThreaded.cpp:(.text._ZNSt6threadC2IZNSt13__future_base17_Async_state_implISt12_Bind_simpleIFPFdPdS4_S4_iES4_S4_S4_iEEdEC4EOS8_EUlvE_IEEEOT_DpOT0_[_ZNSt6threadC5IZNSt13__future_base17_Async_state_implISt12_Bind_simpleIFPFdPdS4_S4_iES4_S4_S4_iEEdEC4EOS8_EUlvE_IEEEOT_DpOT0_]+0x2d): undefined reference to `pthread_create' 
collect2: error: ld returned 1 exit status 

Извините за длинную горизонтальную прокрутку, дайте мне знать, если есть лучше отформатировать.

Вот как я компиляции:

g++ threadingVector.cpp -o threadingVector -std=c++0x 
+0

Я видел этот вопрос раньше. –

+0

Может иметь какое-то отношение к этой части ошибки: неопределенная ссылка на 'pthread_create '. –

ответ

0

Позвольте мне знать, если это не правильный ответ, и я должен удалить его, чтобы избежать путаницы с другими людьми, но вчера у меня был точно такой же вопрос и добавление -pthread в компилятор args сработало. Попробуйте:

g++ -pthread threadingVector.cpp -o threadingVector -std=c++0x 

На различных архитектурах зЬй :: нить & компании оставить некоторые реализации низкого уровня многопоточности вниз к окружающей среде, и одна популярная библиотека, которая завершит реализацию многопоточности на Linux будет потоковый.

+0

Да, это сделало, спасибо. –

Смежные вопросы