当前位置: 首页 > news >正文

c++编写java模式的线程类

在 C++11 中,我们可以使用 <thread> 标准库来创建和管理线程。然而,C++ 不像 Java 那样提供一个内置的 Thread 类,而是提供了一个更底层的 API。下面是一个模拟 Java 中 Thread 类功能的 C++11 实现。

我们将创建一个名为 SimpleThread 的类,它将允许用户通过继承来重载 run 方法,并且可以调用 start 成员函数来启动线程。

#include <iostream>
#include <thread>
#include <functional>class SimpleThread {
public:using ThreadFunc = std::function<void()>;SimpleThread(ThreadFunc func) : m_func(func), m_thread() {}virtual ~SimpleThread() {if (m_thread.joinable()) {m_thread.join();}}void start() {m_thread = std::thread(m_func);}protected:virtual void run() {// 默认情况下,run 方法不执行任何操作}private:ThreadFunc m_func;std::thread m_thread;// 私有构造函数防止直接使用SimpleThread() = delete;
};// 示例子类
class MyThread : public SimpleThread {
public:MyThread() : SimpleThread(std::bind(&MyThread::run, this)) {}protected:void run() override {std::cout << "Running thread: " << std::this_thread::get_id() << std::endl;// 这里可以添加你的代码}
};int main() {MyThread t;t.start();// 主线程继续执行其他任务std::this_thread::sleep_for(std::chrono::seconds(1));return 0;
}

在这个实现中,SimpleThread 类接受一个 std::function<void()> 类型的函数对象作为构造参数,这个函数对象将被用来创建并启动线程。run 方法是虚函数,子类可以通过继承 SimpleThread 并重载 run 方法来定义线程的行为。

需要注意的是,C++11 不支持在构造函数中调用虚函数,所以我们使用了 std::bind 来绑定成员函数 runthis 指针,从而允许在构造时传递给 SimpleThread 构造函数。

另外,SimpleThread 的默认析构函数会确保如果线程尚未结束,它会被正确地 join。这有助于避免资源泄漏。

http://www.lryc.cn/news/414915.html

相关文章:

  • vcpkg install libtorch[cuda] -allow-unsupported-compiler
  • Flink的DateStream API中的ProcessWindowFunction和AllWindowFunction两种用于窗口处理的函数接口的区别
  • MATLAB中dmperm函数用法
  • 苹果折叠屏设备:创新设计与技术突破
  • C#加班统计次数
  • 【资治通鉴】“ 将欲取之、必先予之 “ 策略 ① ( 魏桓子 割让土地 | 资治通鉴原文分析 | 道德经、周书、吕氏春秋、六韬 中的相似策略 )
  • Spring5 的日志学习
  • python爬虫实践
  • 【前端面试】七、算法-数组展平
  • Laravel php框架与Yii php 框架的优缺点
  • 使用 addRouteMiddleware 动态添加中间
  • Zookeeper未授权访问漏洞
  • 【JavaEE】定时器
  • 2024带你轻松玩转Parallels Desktop19虚拟机!让你在Mac电脑上运行Windows系统
  • 【算法】递归实现二分查找(优化)以及非递归实现二分查找
  • CDN 是什么?
  • 索引:SpringCloudAlibaba分布式组件全部框架笔记
  • 2024第五届华数杯数学建模竞赛C题思路+代码
  • FFmpeg源码:av_reduce函数分析
  • nginx: [error] open() “/run/nginx.pid“ failed (2: No such file or directory)
  • <数据集>BDD100K人车识别数据集<目标检测>
  • 利用SSE打造极简web聊天室
  • 代码随想录第二十天|动态规划(4)
  • TreeSize:免费的磁盘清理与管理神器,解决C盘爆满的燃眉之急
  • 如何建立自己的技术知识体系
  • JS优化了4个自定义倒计时
  • 模型实战(25)之 基于LoFTR深度学习匹配算法实现图像拼接
  • 计算机毕业设计Python+Spark知识图谱高考志愿推荐系统 高考数据分析 高考可视化 高考大数据 大数据毕业设计
  • 【python】文件
  • 《Attention Is All You Need》核心观点及概念