[英]cout with this_thread::sleep_for?
我正在测试使用this_thread::sleep_for()
创建一个行为类似于cout
的对象,除了在打印字符串时,每个字符之间的延迟很小。 但是,与其等待每个字符之间的0.1秒,不如等待大约一秒钟,然后一次打印所有字符。 这是我的代码:
#include <iostream>
#include <chrono>
#include <thread>
class OutputObject
{
int speed;
public:
template<typename T>
void operator<<(T out)
{
std::cout << out;
}
void operator<<(const char *out)
{
int i = 0;
while(out[i])
{
std::this_thread::sleep_for(std::chrono::milliseconds(speed));
std::cout << out[i];
++i;
}
}
void operator=(int s)
{
speed = s;
}
};
int main(int argc, char **argv)
{
OutputObject out;
out = 100;
out << "Hello, World!\n";
std::cin.get();
return 0;
}
知道我在做什么错吗?
编辑:CoryKramer指出,std :: flush是实时运行所必需的。 通过更改std::cout << out[i];
到std::cout << out[i] << std::flush;
,我解决了我的问题!
流具有缓冲区,因此cout
不会在刷新流之前输出文本,例如endl
刷新流并添加'\\n'
也调用了cin
自动刷新流中的缓冲数据。 尝试使用此:
while(out[i])
{
std::this_thread::sleep_for(std::chrono::milliseconds(speed));
std::cout << out[i];
std::cout.flush();
++i;
}
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.