持有滚动条会冻结win32控制台应用程序

时间:2011-09-05 15:20:31

标签: c++ c windows console

我写了这个小程序来说明我的问题:

int main(int argc, char* argv[])
{
   int i = 0;
   while(1)
   {
       std::cout << i++ << std::endl;
       Sleep(1000);
   }
    return 0;
}

因此,如果你持有垂直滚动条(观察日志或其他......),这个简单的程序将停止计数。

有没有办法避免这种情况?

干杯

2 个答案:

答案 0 :(得分:9)

不是真的。会发生什么是持有滚动条会阻止应用程序将任何新输出写入控制台,因此它最终会阻塞刷新std :: cout。这是由于Windows如何实现控制台而无法避免的。

答案 1 :(得分:0)

如果你不能依赖程序的继续执行,你可以根据初始程序所用的时间来计算i

#include <ctime>

time_t initialSeconds;

int main(int argc, char* argv[])
{
  double i=0;

  //Initialise time
  initialSeconds = time (NULL);

  while(1) {
    i = difftime(initialSeconds, time(NULL));
    sleep(1000);
  }
}

这将根据计算机时钟计算经过的秒数。

(没有对此进行测试,因为我不在使用编译器的计算机上)