C++11 (async)
От: Дмитрий Украина  
Дата: 04.01.12 21:16
Оценка:
Здравствуйте!
Ребята, посмотрев тут о многопоточности, хотел попробовать, но не вышло.
подскажите пожалуйста:
1. может ли такое быть, чтоб хедера с компилятором шли, но реализации не было (у меня gcc 4.6.1 под mingw32, работаю с Code::Blocks)?
2. как можно посмотреть, какие в точности фичи поддерживает компилятор?

3. а в точности, я пробовал такой код:
#include <future>

static int f(int i)
{
    return i;
};

int main()
{
    std::async(std::launch::async, f, 0); // error: invalid use of incomplete type 'struct std::future<int>'
    return 0;
}

проблема в том, что функция std::async возвращает объект типа std::future<int>,
но компилятору что-то не нравиться.
подскажите, пожалуйста, в чем проблема?

Заранее спасибо
Re: C++11 (async)
От: Сыроежка  
Дата: 05.01.12 00:12
Оценка:
Здравствуйте, Дмитрий, Вы писали:

Д>Здравствуйте!

Д>Ребята, посмотрев тут о многопоточности, хотел попробовать, но не вышло.
Д>подскажите пожалуйста:
Д>1. может ли такое быть, чтоб хедера с компилятором шли, но реализации не было (у меня gcc 4.6.1 под mingw32, работаю с Code::Blocks)?
Д>2. как можно посмотреть, какие в точности фичи поддерживает компилятор?

Д>3. а в точности, я пробовал такой код:

Д>
Д>#include <future>

Д>static int f(int i)
Д>{
Д>    return i;
Д>};

Д>int main()
Д>{
Д>    std::async(std::launch::async, f, 0); // error: invalid use of incomplete type 'struct std::future<int>'
Д>    return 0;
Д>}
Д>

Д>проблема в том, что функция std::async возвращает объект типа std::future<int>,
Д>но компилятору что-то не нравиться.
Д>подскажите, пожалуйста, в чем проблема?

Д>Заранее спасибо


Ну, вообще-то, сообщение об ошибке говорит само за себя. Очевидно, что компилятор не видет определения этой структуры. То есть она объявлена, но ее определение недоступно компилятору.
Меня можно встретить на www.cpp.forum24.ru
Re[2]: C++11 (async)
От: Дмитрий Украина  
Дата: 05.01.12 09:43
Оценка:
Здравствуйте, Сыроежка, Вы писали:

С>Ну, вообще-то, сообщение об ошибке говорит само за себя. Очевидно, что компилятор не видет определения этой структуры. То есть она объявлена, но ее определение недоступно компилятору.


оно то так, но в файле <future> определение есть...
*(посмотрел еще раз)
они то есть но закрыты такой вот штукой:
#if defined(_GLIBCXX_HAS_GTHREADS) && defined(_GLIBCXX_USE_C99_STDINT_TR1) \
  && defined(_GLIBCXX_ATOMIC_BUILTINS_4)

Спасибо, буду искать
Re: C++11 (async)
От: Alexey F  
Дата: 05.01.12 13:58
Оценка:
Здравствуйте, Дмитрий, Вы писали:

Д>1. может ли такое быть, чтоб хедера с компилятором шли, но реализации не было (у меня gcc 4.6.1 под mingw32, работаю с Code::Blocks)?

Да, в MinGW с mingw.org (может одно время, может до сих пор) не были реализованы std потоки.
Были workaround'ы для этого и, если мне не изменяет память, в некоторых сборках (не на официальном сайте) они включены (быть может, вместе с OpenMP, LTO и т.п.).
Ищутся они по ключевым словам "mingw builds", на главных страницах описаны поддерживаемые возможности. Прямых ссылок не даю, т.к. сам нигде работу std::threads не проверял.
Re[2]: C++11 (async)
От: Дмитрий Украина  
Дата: 05.01.12 15:32
Оценка:
Здравствуйте, Alexey F, Вы писали:

AF>Ищутся они по ключевым словам "mingw builds", на главных страницах описаны поддерживаемые возможности. Прямых ссылок не даю, т.к. сам нигде работу std::threads не проверял.


Спасибо, поищу
Re[2]: C++11 (async)
От: Дмитрий Украина  
Дата: 05.01.12 21:42
Оценка:
Здравствуйте, Alexey F, Вы писали:

AF>Да, в MinGW с mingw.org (может одно время, может до сих пор) не были реализованы std потоки.


в MinGW действительно с потоками не очень, поставил цигвин, но не могу его прикрутить к Соде::Блокс:
установил gcc, выбрал в настройках проекта "цигвин гсс", а оно:
Execution of 'g++.exe -Wall -fexceptions -std=c++0x -g -c D:/programming/CodeBlocks/tehread/main.cpp -o obj/Debug/main.o' in 'D:\programming\CodeBlocks\tehread' failed.

пробовал напрямую с цигвин терминал, говорит:
Fatal error: can't create obj/Debug/main.o: No such file or directory


Подскажите, пожалуйста, в чем проблема?
Re[3]: C++11 (async)
От: Дмитрий Украина  
Дата: 05.01.12 21:57
Оценка:
Здравствуйте, Дмитрий, Вы писали:

Д>Подскажите, пожалуйста, в чем проблема?


извините, туплю, ему наверное нужно уточнить куда бинарники класть, т.е.
не
g++.exe -Wall -fexceptions  -std=c++0x -g     -c D:/programming/CodeBlocks/tehread/main.cpp -o obj/Debug/main.o

а
g++.exe -Wall -fexceptions  -std=c++0x -g     -c D:/programming/CodeBlocks/tehread/main.cpp -o D:/programming/CodeBlocks/tehread/obj/Debug/main.o
Re: C++11 (async)
От: niXman Ниоткуда https://github.com/niXman
Дата: 10.01.12 22:31
Оценка:
Здравствуйте, Дмитрий, :
у меня в подписи сборки MinGW с рабочими трэдами.
пачка бумаги А4 стОит 2000 р, в ней 500 листов. получается, лист обычной бумаги стОит дороже имперского рубля =)
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.