You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

每个线程使用boost::asio::deadline_timer失效问题求助

关于Boost.Asio并发任务Timer类的讨论与建议

嘿,作为新手能想到用Boost.Asio来实现并发任务,这个思路真的不错!先帮你把需求和代码整理清楚,再给你提几个需要注意的小细节~

你的需求与实现思路

  • 核心需求:让两个耗时较长的任务并发执行
  • 实现方案:自定义一个Timer类,内部管理独立的boost::asio::io_service,并为其创建线程来处理异步任务

你提供的Timer类代码(timer.hpp)

#include <iostream>
#include <string>
#include <functional>
#include <thread>
#include <boost/date_time/posix_time/posix_time.hpp>
// 这里应该还缺了boost/asio相关的头文件吧?比如boost/asio.hpp
// 如果能补充完整的实现代码(比如cpp文件里的逻辑),能更精准地帮你排查问题~

几个新手容易踩的坑&实用建议

  • io_service生命周期要盯紧:一定要保证io_service的存活时间比处理任务的线程长!如果线程还在运行时io_service被销毁,直接会导致程序崩溃。可以用boost::asio::io_service::work来维持io_service的工作状态,直到你主动调用stop()终止它。
  • 线程别乱“放飞”:创建的线程记得要正确调用join(),尽量别用detach(),否则容易出现线程泄漏或者程序退出时线程还在后台运行的问题。
  • 耗时任务要合理包装:如果你的任务是阻塞型的耗时操作,别直接扔给io_service的线程(会占着线程资源没法处理其他任务),可以把阻塞任务单独包装到新线程里,或者给io_service分配足够多的线程来支撑并发。
  • 共享资源要防竞争:如果多个任务会访问同一份共享数据,记得用boost::asio::strand来序列化访问,避免出现数据竞争的问题。

要是能把完整的Timer类实现代码补充上来,我可以帮你更细致地检查有没有潜在问题哦~

内容的提问来源于stack exchange,提问作者Scarcha

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.26 08:19:01