阿修罗的线程类(以boost::thread为基础,增加了终止线程的功能)

anrxhzh 2002-07-01 04:50:15
//阿修罗的线程类(以boost::thread为基础,增加了终止线程的功能)
//欢迎指正

//module.h
#ifndef ASHURA_MODULE_HEADER
#define ASHURA_MODULE_HEADER

#include <boost/utility.hpp>

namespace ashura {

class controlled_module_implement;
class controlled_module : boost::noncopyable {
public:
virtual void run();
bool exit(unsigned long sec=0);
protected:
controlled_module();
virtual ~controlled_module();
private:
virtual bool initialize()=0;
virtual void release()=0;
virtual bool work()=0;
private:
controlled_module_implement* impl_;
};

}

#endif

//module.cpp
#pragma warning (disable:4786)
#include "module.h"
#include "janitor.h"
#include <boost/thread/xtime.hpp>
#include <boost/thread/condition.hpp>
#include <boost/thread/mutex.hpp>

namespace ashura {

class controlled_module_implement : boost::noncopyable {
public:
controlled_module_implement() :active_(false),command_exit_(false){}
boost::condition module_is_exit;
boost::mutex monitor;
void active(bool ac)
{boost::mutex::scoped_lock lk(monitor); if(!(active_=ac))module_is_exit.notify_all();else command_exit_=false;}
bool command_exit(){boost::mutex::scoped_lock lk(monitor); return command_exit_;}
bool active_,command_exit_;

};

controlled_module::controlled_module()
:impl_(new controlled_module_implement)
{
}

controlled_module::~controlled_module()
{
delete impl_;
}

void controlled_module::run()
{
ObjJanitor janitor(*impl_,&controlled_module_implement::active,false);
impl_->active(true);
{
ObjJanitor janitor(*this,&controlled_module::release);
if(this->initialize())
{
while(!impl_->command_exit() && this->work());
}
}
}

bool controlled_module::exit(unsigned long sec)
{
boost::mutex::scoped_lock lk(impl_->monitor);
impl_->command_exit_ = true;
while(impl_->active_)
{
if(sec)
{
boost::xtime xt;
boost::xtime_get(&xt, boost::TIME_UTC);
xt.sec += sec;
if(!impl_->module_is_exit.timed_wait(lk,xt))
return false;
}
else
impl_->module_is_exit.wait(lk);
}
return true;
}

}

//main.cpp
#include "module.h"
#include <boost/thread/thread.hpp>
#include <iostream>
#include <boost/thread/xtime.hpp>
#include <windows.h>

struct test : public ashura::controlled_module {
test():i(0){};
bool initialize(){std::cout<<"initialize\n";return true;}
bool work(){std::cout<<i<<std::endl;Sleep(1000);return i++<6;}
void release(){std::cout<<"release\n";};
private:
int i;
};

static test module;

void func()
{
module.run();
}

int main()
{
for(int i=0;i<3;i++)
{
boost::thread t(&func);
Sleep(10);
std::cout << "exit module " << module.exit() << std::endl;
t.join();
std::cout << std::endl;
}
return 0;
}

//测试结果
initialize
0
release
exit module 1

initialize
1
release
exit module 1

initialize
2
release
exit module 1
...全文
153 5 打赏 收藏 举报
写回复
用AI写文章
5 条回复
切换为时间正序
请发表友善的回复…
发表回复
denghby 2002-07-14
  • 打赏
  • 举报
回复
hehe ~~~~~~~~~~~

up
nikitar 2002-07-14
  • 打赏
  • 举报
回复
d
wkoji 2002-07-14
  • 打赏
  • 举报
回复
UP
anrxhzh 2002-07-12
  • 打赏
  • 举报
回复
哪位好心人顶一下,让俺把这个帖子结了。多谢了。
anrxhzh 2002-07-01
  • 打赏
  • 举报
回复
增加了运行模块的单实例限制。

class controlled_module_implement : boost::noncopyable {
public:
boost::mutex monitor,instance;
...
};

void controlled_module::run()
{
boost::mutex::scoped_lock lk(impl_->instance);
...
}
附训练好的 YOLO 权重与 PyQt 可视化检测界面,页面底部含可视化效果预览,毕设/课设开箱即用。 【数据集概况】 · 检测类别(中文):[坡道(ramp)] · 训练集:275 张 · 验证集:27 张 · 测试集:0 张 · 总计:302 张 该数据集聚焦于城市环境中各类建筑入口处的坡道设施,涵盖住宅、商铺、公共设施等多种场景,真实反映了无障碍通行设施在实际应用中的多样化形态。数据集中包含金属、橡胶、塑料等多种材质的坡道,以及不同尺寸、结构和安装方式的实例,充分体现了坡道在城市基础设施中的广泛部署与重要性。该数据集为城市智慧化管理、无障碍环境建设及公共安全监控提供了高质量的视觉基础支持。... 【训练曲线与评估图】 【模型训练配置】 参数 | 值 模型 | yolo26n 训练轮数 | 100 epochs 输入尺寸 | 640x640 批次大小 | 24 优化器 | auto 初始学习率 | 0.01 训练设备 【关键指标汇总】 训练了 33 个 epoch,最终轮指标: 指标 | 数值 mAP50 | **0.6372** mAP50-95 | 0.3401 Precision | 0.6603 Recall | 0.6190 train/box_loss | 1.0569 train/cls_loss | 0.7307 val/box_loss | 1.6084 val/cls_loss | 1.9323 【训练过程分析】 33 轮训练后 mAP50 仅 0.6372,模型收敛不充分。Loss 曲线前期下降后进入平台期,mAP 提升缓慢。mAP50-95 为 0.3401,定位精度同样偏低。 【模型性能评估】 Precision 0.6603、Recall 0.6190,精度高于召回,存在一... 使用场景:毕业设计、课程设计、深度学习入门、工业场景落地验证。

70,040

社区成员

发帖
与我相关
我的任务
社区描述
C语言相关问题讨论
社区管理员
  • C语言
  • 花神庙码农
  • 架构师李肯
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧