C 多线程错误

C++ multithreading errors

本文关键字:错误 多线程      更新时间:2023-10-16

我一直在尝试学习如何在C 中使用多线程,但是#include<thread>在范围中未声明线程类型引起的问题。error: 'thread' was not declared in this scope。我一直在进行研究,并且遇到了很多有关如何解决这个问题的答案。我目前在理解我的编译器Mingw不有效地支持线程,但我不确定该如何处理该信息。

对此事的任何指导都将不胜感激。

另外,我认为这可能会有所帮助。如果我在命令行上运行gcc -v,则将获得此输出:

Using built-in specs.
COLLECT_GCC=c:MinGWbingcc.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)

编辑:我已经看过这个网页,https://github.com/meganz/mingw-std-threads,是一个潜在的解决方案,但我认为这对我不起作用。除非我以某种方式将mingw-thread.h放在错误的文件夹中。

我认为这里的问题是您没有使用C 11功能告诉编译器。"线程"属于C 11功能,让我们尝试将-std=c++11添加到CXXFLAGS或CPPFLAGS中,看看它是否解决了您的问题

我的心理力量建议您忘记了std::名称空间属性。这可以解释为什么thread即使使用#include <thread>也是不确定的。关于-std=c++11的另一个答案也将您转向正确的方向。而且不要忘记-pthread编译器/链接器选项。

$ 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