Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/multithreading/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
如果未声明,则通过预处理器删除thread::hardware_并发 我有使用的C++代码 int nthreads = thread::hardware_concurrency();_C++_Multithreading_Header_C Preprocessor - Fatal编程技术网

如果未声明,则通过预处理器删除thread::hardware_并发 我有使用的C++代码 int nthreads = thread::hardware_concurrency();

如果未声明,则通过预处理器删除thread::hardware_并发 我有使用的C++代码 int nthreads = thread::hardware_concurrency();,c++,multithreading,header,c-preprocessor,C++,Multithreading,Header,C Preprocessor,当我尝试在某些计算机上构建应用程序时,会收到错误消息 error: 'thread' has not been declared 我没有问如何解决这个错误。我更感兴趣的是,是否有一种特殊的“保护”,我可以使用它来简单地通过预处理器删除代码行,例如在OpenMP中,我可以使用: #ifdef _OPENMP ... #endif std::thread::hardware\u并发性由C++11提供。如果那些“某些计算机”上的编译器支持它,您可能必须切换C++11支持(例如,使用mingw/gc

当我尝试在某些计算机上构建应用程序时,会收到错误消息

error: 'thread' has not been declared
我没有问如何解决这个错误。我更感兴趣的是,是否有一种特殊的“保护”,我可以使用它来简单地通过预处理器删除代码行,例如在OpenMP中,我可以使用:

#ifdef _OPENMP
...
#endif

std::thread::hardware\u并发性
由C++11提供。如果那些“某些计算机”上的编译器支持它,您可能必须切换C++11支持(例如,使用mingw/gcc
-std=C++11

要在不可用时禁用
硬件\u并发
使用,最好的解决方案可能是检测C++11支持

可能适合您,即使您使用Visual Studio:

#if __cplusplus >= 201103L || (defined(_MSC_VER) && _MSC_VER >= 1900)
    int nthreads = std::thread::hardware_concurrency();
#else
    int nthreads = 4; // whatever fallback value
#endif

请注意,它检测到VS 2015编译器版本,因为它是第一个宣传完全支持C++11的版本。如果
硬件并发性
恰好在较旧的VS编译器上可用,您可以将
\u MSC\u VER
检查调整为较旧的版本。

您问的问题是否正确?听起来像是一场灾难。解决错误比在需要避免错误时尝试检测要好。“错误:'线程'尚未声明”-您是否记得使用
#include
?也可能
使用名称空间std或更好的
使用std::thread因为您没有将
硬件\u并发()
完全限定为
std::thread::hardware\u并发()
,仅限定为
thread::hardware\u并发()