如何在控制台中创建进度条?

时间:2014-04-21 17:25:40

标签: c++ multithreading

我做过这样的事情:

#include <thread>

int main(int argc, char *argv[])
{
  //...
  std::thread sad_thread(MakeMeFeelSad(), params);
  sad_thread.join();
  //...
  std::thread happy_thread(MakeMeFeelHappy(), params);
  happy_thread.join();
  //...
}

函数MakeMeFeelSadMakeMeFeelHappy每个运行大约2分钟,我需要在cmd中做这样的事情:我变得悲伤/快乐..... < / em>(当函数正在运行时) - 点总是出现在5,然后它们消失,然后再次出现。它就像带有圆点的进度条。我该怎么做?

ETA:我的意思是我需要另一个带回调的线程吗?

2 个答案:

答案 0 :(得分:3)

您可以使用以下内容:

std::future<void> fut = std::async(std::launch::async, MakeMeFeelSad, params);

std::cout << "I'm getting Sad";
std::chrono::milliseconds span (100);
while (fut.wait_for(span) == std::future_status::timeout)
    std::cout << '.';

答案 1 :(得分:1)

您确实可以创建另一个thread,但也可以使用condition_variable对象,并循环使用wait_until方法。您将能够在此循环中显示您的点。

请参阅Timeout for thread.join()