此问题在此处已有答案:
std::cout won't print(4个答案)
5天前关闭。
我想同时运行两个循环,而不必等待一个循环完成后再开始另一个循环。我所做的在WINDOWS上可以工作,但在LINUX上不行,我不知道为什么。当我编译代码时,只需使用:g++ -o一个A.cpp,然后我运行它,它什么都不做,在标准输出上也不显示任何东西。在Windows上,id显示如下:12121221212222112121212121121212
void f1()
{
for (int i = 0; i < 500; ++i)
{
std::cout << "1";
std::this_thread::sleep_for(1s);
}
}
void f2()
{
for (int i = 0; i < 500; ++i)
{
std::cout << "2";
std::this_thread::sleep_for(1s);
}
}
int main()
{
std::thread worker(f1);
std::thread worker2(f2);
int a;
std::cin >> a;
return 1;
}
也许我遗漏了一些关于LINUX环境的东西,我必须在线程obj中设置一些参数。也许在LINUX中,我必须用另一种方式来做。我想知道这是否是在Linux上应该工作的东西,我只是遗漏了一些东西,或者我必须使用另一种方法。
1条答案
按热度按时间ajsxfq5m1#
您正在将“1“和“2”添加到stdout缓冲区,可能需要一段时间才能看到任何输出。
请参阅:https://stackoverflow.com/a/1716621
fprintf(stdout,“您的消息”)== std::cout〈〈“您的消息”
默认情况下,stdout流是行缓冲的,因此只有在到达换行符后才会显示缓冲区中的内容
也许在每个std::cout处添加一个“\n”可能会有所帮助。
你的线程看起来不错,但是当它们的任务完成时,最好使用.join()。调用.join()会暂停你的main()线程,但这正是std::cin的作用,对吗?
还有,我不会每1/2后冲水,冲水是相当昂贵的。