C++11 - Thread was not delcared in this scope error

0

Mam taki program:

#include <iostream>
#include <thread>
using namespace std;

void function1(){
    cout << "DZIALAM!!!!!" << endl;
}

int main(){
    thread t1(function1);
    return 0;
} 

I dostaje taki błąd:
"||=== ewghm, Debug ===|
C:\Documents and Settings\KM\Pulpit\PROGRAMY\ewghm\main.cpp||In function 'int main()':|
C:\Documents and Settings\KM\Pulpit\PROGRAMY\ewghm\main.cpp|10|error: 'thread' was not declared in this scope|
C:\Documents and Settings\KM\Pulpit\PROGRAMY\ewghm\main.cpp|10|error: expected ';' before 't1'|
== Build finished: 2 errors, 0 warnings (0 minutes, 0 seconds) ===| "

W CodeBlocks w ustawieniach kompilatora mam ustawione: "Have g++ follow the C++11 ISO C++ language standard [-std=c++11]"

Korzystam dużo z C++11 i to jest pierwsza rzecz, która mi nie działa. Wiek tos jak sobie z tym poradzić?

Mój system to Windows XP, kompilator to: GNU GCC.

0

z tego co widzę to albo źle dodajesz bibliotekę thread(bo nie widzi ci klasy) albo brakuje ci std:: co nie powinno być błędem bo masz using namespace std... ew nie dodałeś flagi do linkera, to się często zdaża

0

Niestety, ja mam MinGW GCC 4.8.1 i też brakuje w nim std::thread.

Możesz użyć biblioteki Boost.

#include <iostream>
#include <boost/thread.hpp>
using namespace std;
 
void function1(){
    cout << "DZIALAM!!!!!" << endl;
}
 
int main(){
    boost::thread t1(function1);
    return 0;
} 

Weź też pod uwagę że kod jest nieprawidłowy: funkcja main zakończy się zanim odpali twój wątek i wyświetli cokolwiek.

0

Sam kod działa (po małej poprawce): http://melpon.org/wandbox/permlink/jk1wz1FrQehKDQBK (pod 4.8.1 też działa)
Jakiego kompilatora używasz (wersja)?
Jak to budujesz, może używasz złych ustawień kompilatora?
Może masz wyłączone wsparcie dla wątków (jest taka flaga).

0

To o czym pisalem, może sie okazac, że w wielu systemach nie bedzie pelnej implementacji c++11 właśnie ze względu na te różne thready, bo api systemu może działać trochę inaczej niż wymyslili to twórcy standardu, a c++ nie ma pod sobą tak jak java subsystemu, tylko działa natywnie odwołując się do systemu i w tym jest siła c++.

1

mingw nie ma jeszcze wątków. Możesz za to użyć tego: https://github.com/meganz/mingw-std-threads albo jakiejś wersji mingw-w64, która zawiera wątki.
Kolejne możliwości to boost::thread albo po prostu pthread.

0

std::thread jest dostępne w TDM GCC (z tego co pisze autor): http://tdm-gcc.tdragon.net/quirks

0

MinGW dołączane do Qt też ma wątki.

Sam kod jest poprawny, ale ponieważ nie czekasz na zakończenie wątku, destruktor t1 ma prawo wywołać std::terminate

0

Dzieki za odpowiedzi. Odpaliłem to w Qt bo CodeBlocksa nie mogę ogarnąć...

1 użytkowników online, w tym zalogowanych: 0, gości: 1