gpt4 book ai didi

c++ - io_service 截止时间计时器不定期工作

转载 作者:行者123 更新时间:2023-11-30 01:51:12 24 4
gpt4 key购买 nike

我想在里面的类中周期性地制作一个10秒的计时器,但是它不起作用。它会在 10 秒内第一次打印计数。但在那之后,它不会再等待 10 秒。具体代码。

#include <iostream>
#include <boost/asio.hpp>
#include <boost/bind.hpp>
#include <boost/date_time/posix_time/posix_time.hpp>

class test {
boost::asio::io_service& a;
boost::asio::deadline_timer t;
int count;

void print(const boost::system::error_code& /*e*/)
{
while(true)
{
std::cout << count << " ";
++(count);
t.expires_at(t.expires_at() + boost::posix_time::seconds(10));
t.async_wait(boost::bind(&test::print, this, boost::asio::placeholders::error));
}
}
public:
test(boost::asio::io_service& io) : a(io), t(io, boost::posix_time::seconds(10)) {
count = 0;
};
void start() {
t.async_wait(boost::bind(&test::print, this, boost::asio::placeholders::error));
}
};
int main()
{
boost::asio::io_service io;
int count = 0;
test b(io);
b.start();
io.run();
return 0;
}

最佳答案

您的 print() 函数有一个不必要的 while(true) 循环。删除它后,我们会注意到输出不会立即出现;那是因为 std::cout 是行缓冲的,我们从不写换行符。这是完整的固定函数:

void print(const boost::system::error_code& /*e*/)
{
std::cout << count << " " << std::flush;
++(count);
t.expires_at(t.expires_at() + boost::posix_time::seconds(10));
t.async_wait(boost::bind(&test::print, this, boost::asio::placeholders::error));
}

关于c++ - io_service 截止时间计时器不定期工作,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26459474/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com