简体   繁体   中英

C++ multithreading errors

I have been starting to try and learn how to utilize multithreading in c++, but the #include<thread> causes issues with the thread type being not declared in the scope. error: 'thread' was not declared in this scope . I have been doing research, and I have come across a lot of answers regarding how to solve this issue. Im presently at the understanding that my compiler, MinGW, doesn't support thread effectively, but I am not sure what to do with that information.

Any guidance on this matter is appreciated.

Also, I think this may be helpful. If I run gcc -v on my command line, I get this output:

Using built-in specs.
COLLECT_GCC=c:\MinGW\bin\gcc.exe
COLLECT_LTO_WRAPPER=c:/mingw/bin/../libexec/gcc/mingw32/6.3.0/lto-wrapper.exe
Target: mingw32
Configured with: ../src/gcc-6.3.0/configure --build=x86_64-pc-linux-gnu --host=mingw32 --target=mingw32 --with-gmp=/mingw --with-mpfr --with-mpc=/mingw --with-isl=/mingw --prefix=/mingw --disable-win32-registry --with-arch=i586 --with-tune=generic --enable-languages=c,c++,objc,obj-c++,fortran,ada --with-pkgversion='MinGW.org GCC-6.3.0-1' --enable-static --enable-shared --enable-threads --with-dwarf2 --disable-sjlj-exceptions --enable-version-specific-runtime-libs --with-libiconv-prefix=/mingw --with-libintl-prefix=/mingw --enable-libstdcxx-debug --enable-libgomp --disable-libvtv --enable-nls
Thread model: win32
gcc version 6.3.0 (MinGW.org GCC-6.3.0-1)

edit: I've seen this webpage, https://github.com/meganz/mingw-std-threads , as a potential solution, but I don't think this works for me. Unless somehow I am putting the mingw-thread.h in the wrong folder.

I think the problem here is you did not tell the compiler using c++11 features. 'thread' is belonged to c++11 features, let try adding -std=c++11 into CXXFLAGS or CPPFLAGS and see if it resolves your problem

My psychic powers suggest your forgot the std:: namespace attribute. That would explain why thread is undefined, even with #include <thread> . The other answer about -std=c++11 is also steering you into the right direction. And don't forget the -pthread compiler/linker option.

$ cat foo.cpp
#include <thread>
#include <iostream>

void threadfunc()
{
   std::cout << "Hello from the worker thread" << std::endl;
}


int main()
{
   std::thread t(threadfunc);
   t.join();
   return 0;
}

$ g++ foo.cpp -std=c++11 -o foo -pthread
$ ./foo
Hello from the worker thread

The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM