在等待输入时执行无限循环

时间:2015-05-08 13:24:35

标签: c++ infinite-loop

执行以下操作的C ++程序:

 cout<<"Hello please enter in your age: "; 
 int age;
 cin>>age; 

当系统等待输入时,我想显示以下循环:

for(;;)
{
 cout << "Waiting.............." << '\r' << flush; Sleep(500);
 cout << ".......Waiting......." << '\r' << flush; Sleep(500);
 cout << "..............Waiting" << '\r' << flush; Sleep(500);
}

当有任何输入时,循环应该停止。

2 个答案:

答案 0 :(得分:1)

因为cin和读取函数通常都是阻塞操作,所以你不能创建别的东西,因为你的主线程已被阻止&#34;。

执行此操作的唯一方法是创建另一个线程,该线程将打印到由全局变量控制的同一STDOUT。基本上你需要这样的东西:

//print thread
while(global == 1)
{
    cout<<"TEXT";
    ........
}

并在主线程中:

volatile int global = 0;
....
global = 1;
cin>>age;
global = 0;

这不是一个好习惯,但你可以从这开始,但尝试使用MUTEX而不是全局变量

答案 1 :(得分:1)

这对我有用

#include <iostream>
#include <cstdlib>
#include <pthread.h>
#include <unistd.h>

using namespace std;

void *PrintWaiting(void *id)
{
   for(;;)
   {
      cout << "Waiting.............." << '\r' << flush; sleep(1);
      cout << ".......Waiting......." << '\r' << flush; sleep(1);
      cout << "..............Waiting" << '\r' << flush; sleep(1);
   }
   pthread_exit(NULL);
}

int main ()
{
   pthread_t thread;

   pthread_create(&thread, NULL, PrintWaiting, NULL);

   int age;
   cout << "Hello please enter in your age: "; 
   cin >> age; 

   pthread_cancel(thread);

   cout << age << endl;

   pthread_exit(NULL);
}

使用-lpthread标志进行编译。

它看起来很奇怪,你必须弄清楚如何格式化输出