背景:如果我不使用任何线程或只生成1线程,这似乎很好,这使得这更令人困惑。
Clion项目这里
问题:我设置了一个基本的示例项目,它启动2个线程,并从主线程、线程2和线程3打印到控制台。
#include <iostream>
#include <thread>
void thread1()
{
for(int i = 0; i < 10000; i++)
{
std::cout << "thread1" << std::endl;
}
}
void thread2()
{
for(int i = 0; i < 10000; i++)
{
std::cout << "thread2" << std::endl;
}
}
int main()
{
std::cout << "Hello, World!" << std::endl;
std::thread threadObj(thread1);
std::thread threadObj2(thread2);
for(int i = 0; i < 10000; i++)
{
std::cout<<"MainThread"<<std::endl;
}
threadObj.join();
std::cout<<"Exit of Main function"<<std::endl;
return 0;
}汇编使用:
--coverage -pthread -g -std=gnu++2a当我在clion中使用"Run 'EvalTest‘with Coverage“运行时,我会得到以下错误:
找不到代码覆盖率数据

因此,它不会产生所需的gcov文件,但如果我注释掉以下代码行,它可以正常工作:
int main()
{
std::cout << "Hello, World!" << std::endl;
std::thread threadObj(thread1);
// std::thread threadObj2(thread2);
for(int i = 0; i < 10000; i++)
{
std::cout<<"MainThread"<<std::endl;
}
threadObj.join();
std::cout<<"Exit of Main function"<<std::endl;
return 0;
}

发布于 2020-10-29 21:09:08
需要执行threadObj.join()和线程Obj2.join()。所以代码看起来是:
int main()
{
std::cout << "Hello, World!" << std::endl;
std::thread threadObj(thread1);
std::thread threadObj2(thread2);
for(int i = 0; i < 10000; i++)
{
std::cout<<"MainThread"<<std::endl;
}
threadObj.join();
threadObj2.join(); // need to join both thread for gcov to work properly
std::cout<<"Exit of Main function"<<std::endl;
return 0;
}https://stackoverflow.com/questions/64596606
复制相似问题