栈不收 2023-06-21 05:36 采纳率: 55.6%
浏览 27
已结题

求解决怎么才能把run函数持续运行

boost库异步操作编程中,异步的读入和写入在run函数调用前有回调函数,之后的则都没有回调函数,我猜测是因为run没有一直返回的原因,然后用了网上教的线程加上work,让他一直保持但却又把程序给堵住了,求解决怎么才能把run函数持续运行,下面是我的代码

try
    {
        cout<<"server start."<<endl;
        //寻找客户端的链接
        serv.start();
        serv.write_data();
//        server_ios.run();
    }
    catch (std::exception& e)
    {
        cout<<e.what()<<endl;
    }

    Thread01 th;
    th.start();
    server_ios.run();

Thread01::Thread01()
{
    server_ios.run();
}


  • 写回答

2条回答 默认 最新

  • 竹山全栈 2023-06-21 08:02
    关注

    需要在某个线程上运行io_service::run()才能保证异步IO操作正常执行。你的问题是在io_service::run()方法被调用之后,还需要在后续代码中继续执行异步操作,但是这些异步操作并没有得到运行可以创建一个线程池来管理多个线程,用于并行地执行异步IO操作。这样可以确保在io_service::run()方法被调用的同时,其他的异步IO操作也能得到执行。
    先创建一个io_service对象,并且创建一个work对象,用于防止io_service在没有任何任务等待的时候退出。然后创建了一个线程池,并且在每个线程中执行io_service::run()方法。这样就能让异步IO操作在多个线程中并行执行。
    在主线程中,可以执行其他操作,比如serv.start()serv.write_data()等操作。这些操作并不会阻塞io_service的执行。
    最后,等待所有线程执行完毕,调用线程的join()方法可以确保所有线程执行完毕之后才返回

    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论
查看更多回答(1条)

报告相同问题?

问题事件

  • 系统已结题 6月29日
  • 已采纳回答 6月21日
  • 创建了问题 6月21日

悬赏问题

  • ¥15 Opencv配置出错
  • ¥15 模电中二极管,三极管和电容的应用
  • ¥15 关于模型导入UNITY的.FBX: Check external application preferences.警告。
  • ¥15 气象网格数据与卫星轨道数据如何匹配
  • ¥100 java ee ssm项目 悬赏,感兴趣直接联系我
  • ¥15 微软账户问题不小心注销了好像
  • ¥15 x264库中预测模式字IPM、运动向量差MVD、量化后的DCT系数的位置
  • ¥15 curl 命令调用正常,程序调用报 java.net.ConnectException: connection refused
  • ¥20 关于web前端如何播放二次加密m3u8视频的问题
  • ¥15 使用百度地图api 位置函数报错?