Cpu usage “做”;C++;boost::asio递归计时器回调;累积调用堆栈? 我想制作一个线程在1秒的周期内定期发送网络消息的C++程序。 我听说过Boost库是支持C++的最有用的跨平台库。

Cpu usage “做”;C++;boost::asio递归计时器回调;累积调用堆栈? 我想制作一个线程在1秒的周期内定期发送网络消息的C++程序。 我听说过Boost库是支持C++的最有用的跨平台库。,cpu-usage,boost,Cpu Usage,Boost,我的第一个想法如下 定义一个功能,该功能具有发送N/W消息的逻辑 使用上述函数注册定时器绑定 1.函数具有在块末尾注册自身的逻辑(与2相同) 然后,当该线程运行时,每隔1秒递归调用一次发送N/W消息“”逻辑 基本测试是完全成功的但是,我想知道这样做是否会产生无限调用堆栈?(例如计时器\u SteadyTimeReculsive()->print2()->print2()->print2()->print2()->print2()…) 我理论上知道调用堆栈是在cpu寄存器上累积的。因此,有时在No

我的第一个想法如下

  • 定义一个功能,该功能具有发送N/W消息的逻辑
  • 使用上述函数注册定时器绑定
  • 1.函数具有在块末尾注册自身的逻辑(与2相同)
  • 然后,当该线程运行时,每隔1秒递归调用一次发送N/W消息“”逻辑
  • 基本测试是完全成功的但是,我想知道这样做是否会产生无限调用堆栈?(例如计时器\u SteadyTimeReculsive()->print2()->print2()->print2()->print2()->print2()…)

    我理论上知道调用堆栈是在cpu寄存器上累积的。因此,有时在NodeJ中会出现致命的错误,因为无限回调中的无限调用堆栈未被调用

    如果这种方式产生无限调用堆栈,我如何解决该程序目标的问题?

    或者,如果您能告诉我如何在Visual Studio中调试此异步回调方法,我们将不胜感激。

    我尝试在VisualStudio中运行调试模式。但是在处理程序绑定到io_服务之后,VS无法跟踪/捕获回调方法callstack

    我的代码如下

        void print2(const boost::system::error_code& e, boost::asio::steady_timer* timer, int* count) {
            /* N/W message sending logic here*/
            (*count)++;
            timer->expires_from_now(chrono::seconds(1));
            timer->async_wait(boost::bind(print2, boost::asio::placeholders::error, timer, count));
    
        }
        void timer_steadyTimerReculsive() {
    
            boost::asio::io_service io;
            int count = 0;
            boost::asio::steady_timer timer(io);
            timer.async_wait(boost::bind(print2, boost::asio::placeholders::error, &timer, &count));
    
            io.run();
        }
        int main() {
            timer_steadyTimerReculsive();
    
            cout << "end method" << endl;
            return 0;
        }
    
    void print2(const boost::system::error\u code&e,boost::asio::stable\u timer*timer,int*count){
    /*此处不包含消息发送逻辑*/
    (*计数)+;
    计时器->从现在起过期(计时::秒(1));
    定时器->异步等待(boost::bind(print2,boost::asio::占位符::error,timer,count));
    }
    无效计时器\u SteadyTimeReculsive(){
    boost::asio::io_服务io;
    整数计数=0;
    升压::asio::稳定定时器(io);
    异步等待(boost::bind(print2,boost::asio::占位符::error,&timer,&count));
    io.run();
    }
    int main(){
    timer_SteadyTimeReculsive();
    
    cout否,异步方法总是在将工作发布到服务以进行异步执行后立即返回

    事实上,如果你不调用
    io_服务::{run | poll}[_one]()
    什么都做不了


    除非同步嵌套递归调用,否则不必担心堆栈溢出。对于异步调用,实际上并没有嵌套。

    谢谢,非常感谢。我用艰苦的方法对其进行了测试。(无限重复(最大重复次数))。它并没有引发任何异常。)