我想用标准C ++线程而不是UNIX线程练习,但很快就遇到了问题,每当我写std::thread
时,CLion用红色强调它并说无法解析命名空间成员'thread'。我检查了我为C ++ 11设置的CMake文件。我重新安装了最新版本的MinGW(6.3.0)并勾选了一个带有G ++编译器的盒子。我的朋友告诉我,他使用Cygwin,一切正常。但它仍然可以与MinGW一起使用吗?
#include <iostream>
#include <thread>
#define BUFFER_SIZE 3
#define PROD_NUM 3
#define CONS_NUM 2
void produce(){
//production
}
void consume(){
//consumption
}
int main() {
std::cout << "Hello, World!" << std::endl;
int i,j;
std::thread producer(produce);
std::thread consumer (consume);
return 0;
}
代码本身几乎没有
修改 在线程库中有
#pragma GCC system_header
#if __cplusplus < 201103L
# include <bits/c++0x_warning.h>
#else
#include <chrono>
#include <functional>
#include <memory>
#include <cerrno>
#include <bits/functexcept.h>
#include <bits/functional_hash.h>
#include <bits/gthr.h>
#if defined(_GLIBCXX_HAS_GTHREADS) && defined(_GLIBCXX_USE_C99_STDINT_TR1)
namespace std _GLIBCXX_VISIBILITY(default)
{
_GLIBCXX_BEGIN_NAMESPACE_VERSION
/**
* @defgroup threads Threads
* @ingroup concurrency
*
* Classes for thread support.
* @{
*/
/// thread
class thread
{
public:
// Abstract base class for types that wrap arbitrary functors to be
// invoked in the new thread of execution.
struct _State
{
virtual ~_State();
virtual void _M_run() = 0;
};
答案 0 :(得分:0)
当CLion无法将代码链接到库时,它会显示红色。
它可能是主机环境变量错误。确保您的CMakeLists.txt
正常工作,您的环境变量,标准库链接以及编译器设置都是正确的。
编译器版本和标准库兼容。 (例如,您使用的是交叉编译器(RasPi,Android),但环境变量显示主机库等会使其失败)
查看相关帖子,可能有所帮助。
答案 1 :(得分:0)
好的,所以我终于解决了这个问题。我安装了Cygwin并在CLion Settings中手动链接了C / C ++编译器(出于某种原因,CLion无法自动检测它们)。清除所有并重新索引该项目。现在它没有显示任何错误和代码编译。
关于MinGW,我在cplusplus.com上阅读了一些有关该问题的帖子,但他们是关于MinGW的早期版本,据说他们最终修复了它,但我说:不,他们没有。 Here有一个很好的存储库,它的README文件表明win32的线程依赖于gthreads,但我发现我的库中的gthread文件一切似乎都没问题......所以仍然需要调查这个问题。如果您了解更多,请在此处写下您的想法和经验。
至于现在的解决方案是Cygwin,使用它而不是MinGW。
P.S。感谢@KillzoneKid了解链接
答案 2 :(得分:-1)
你能确定这个库是否在CLion工具链中可用吗?例如,Cygwin确实有include。