Подтвердить что ты не робот

XCode std:: thread С++

Для небольшого проекта для школы мне нужно создать простую конструкцию клиент/сервер, которая будет работать на маршрутизаторе (с openWRT), и я пытаюсь сделать что-то с потоками в этом приложении.

Мои навыки С++ очень ограничены, поэтому я нашел это на интернет в качестве основного примера.

#include <thread>
#include <iostream>

void doSomeWork( void )
{
    std::cout << "hello from thread..." << std::endl;
    return;
}

int main( int argc, char *argv[] )
{
    std::thread t( doSomeWork );
    t.join();
    return 0;
}

Когда я пытаюсь запустить это в Xcode (4.5.2), я получаю следующую ошибку:

Попытка использования удаленной функции

И он показывает код:

__threaad_execute(tuple<_Fp, _Args...>& __t, __tuple_indices<_Indices...>)
{
    __invoke(_VSTD::move(_VSTD::get<0>(__t)), _VSTD::move(_VSTD::get<_Indices>(__t))...);
}

Думаю, мне нужно что-то сделать с настройками сборки или библиотекой ссылок или что-то еще? Но я не совсем уверен, что делать точно. Я думал, что мне может потребоваться установить следующие настройки (которые я нашел здесь)

  • На вкладке "Параметры сборки" для вашего проекта прокрутите вниз до "Apple LLVM Compiler 4.1 - Language"
  • Задайте настройку "Язык интерфейса С++" на "С++ 11 [-std = С++ 11]"
  • Установите для параметра "Стандартная библиотека С++" значение "libС++ (стандартная библиотека С++ LLVM с поддержкой С++ 11)"

Но те настройки, которые уже установлены.

Есть ли какой-либо флаг/библиотека или что-то, что мне не хватает?

4b9b3361

Ответ 1

Используйте g++ вместо LLVM в XCode. Не забудьте связать потоки libs (-lpthread - или -pthread, -lrt) в настройках сборки компилятора. И подсчитывайте с различиями в поведении потоков по ОС Win/Mac/Linux (несмотря на это POSIX)