c++编译thread程序时加了<thread>但他就是给我报错说没加,我装了个mingw-w64也不行,咋回事?
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了c++编译thread程序时加了<thread>但他就是给我报错说没加,我装了个mingw-w64也不行,咋回事?相关的知识,希望对你有一定的参考价值。
对了我是加了-std+c++11的
参考技术A 代码是什么你是用IDE还是直接命令行编译的
mingw-w64里的GCC是什么版本的? 在命令行g++ -v看看追问
代码如下(极其简单)
直接命令行编译的
gcc版本8.1.0
编译命令及编译结果也截图看一下呗
不过隐约感觉到,你安装的是线程模型为win32的mingw-w64了
需要安装线程模型为posix的Mingw-w64才能这样使用C++ 11的std::thread
完美解决,蟹蟹!
C++的不同对象在线程中会互相干扰吗?
【中文标题】C++的不同对象在线程中会互相干扰吗?【英文标题】:Do different objects of C++ interfere with each other in the thread? 【发布时间】:2019-03-18 10:20:31 【问题描述】:我正在努力学习C++原生多线程技术
我使用的编译器是g++,遵循C++ 14
我使用的开发工具是CodeBlock
我创建了 10 个不同的对象并将它们用作线程的开始
#include <iostream> // std::cout
#include <thread> // std::thread
#include <vector> // std::vector
#include "TestClass.h"
int main ()
std::vector<std::thread> threads;
TestClass test[10];
for (int i=1; i<=10; ++i)
threads.push_back(std::thread(&TestClass::run,std::ref(test[i-1])));
std::cout << "synchronizing all threads...\n";
for (auto& th : threads) th.join();
for(int i=0;i<10;i++)
std::cout << test[i].Getm_Counter() << std::endl;
return 0;
跟帖内容如下
#ifndef TESTCLASS_H
#define TESTCLASS_H
class TestClass
public:
TestClass();
virtual ~TestClass();
unsigned int Getm_Counter() return m_Counter;
void run();
protected:
private:
unsigned int m_Counter;
;
#endif // TESTCLASS_H
如下实现
#include "TestClass.h"
TestClass::TestClass()
//ctor
TestClass::~TestClass()
//dtor
void TestClass::run()
for(int i=0;i<10;i++)
m_Counter++;
我希望每个对象的计数是 10,但结果不是这样。为什么? enter image description here
【问题讨论】:
你在哪里初始化你的 m_COunter ? 非常感谢 在您的情况下,TestClass
的不同实例不会干扰不同的线程。
请不要发布文字图片(例如,您发布的程序输出的图片。)请在您的问题中包含实际文字。
【参考方案1】:
您没有初始化 m_Counter(为 0 或任何其他值)。因此,在您的运行结束时,可以预期它的任何值(取决于它可能采用的垃圾值)。
【讨论】:
以上是关于c++编译thread程序时加了<thread>但他就是给我报错说没加,我装了个mingw-w64也不行,咋回事?的主要内容,如果未能解决你的问题,请参考以下文章