执行以下操作的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);
}
当有任何输入时,循环应该停止。
答案 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
标志进行编译。
它看起来很奇怪,你必须弄清楚如何格式化输出