超级好用的C++实用库之线程基类

这篇具有很好参考价值的文章主要介绍了超级好用的C++实用库之线程基类。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

概述

        在C++中,线程是操作系统能够进行运算调度的最小单位。一个进程可以包含多个线程,这些线程共享进程的资源,比如:内存空间和系统资源,但它们有自己的指令指针、堆栈和局部变量等。这使得线程间的切换比进程间的切换更快,因为线程间共享了很多资源,所以创建和销毁线程的开销也相对较小。

        线程的创建和使用,在Windows和Linux操作系统上不太相同。具体来说,在Windows系统下,可以使用CreateThread()函数或_beginthreadex()函数来创建线程。在POSIX兼容系统(比如:Linux、Unix)上,通常使用pthread_create()函数来创建线程。

        创建线程时需要提供一个函数作为线程入口点,这个函数就是线程要执行的任务,也称之为线程函数。在Windows系统下,该函数原型为void ThreadFunction(void *),参数是一个用户自定义的数据指针,用于传递给线程。在POSIX pthreads中,线程函数原型为void *ThreadFunction(void *),返回值通常是线程结果,通过转换成void *类型。

CHP_BaseThread类

        为了使线程基类能在Windows、Linux操作系统上都能正常使用,我们需要封装掉Windows、Linux线程接口的差异,为上层提供一个统一的接口。CHP_BaseThread类的头文件,可参考下面的示例代码。

#pragma once

#if defined _WIN32
        #include <WinSock2.h>
        #include <Windows.h>
#else
        #include <pthread.h>
#endif

class CHP_BaseThread
{
public:
        CHP_BaseThread();
        virtual ~CHP_BaseThread();

        virtual void Start(unsigned int uiStackSize = 0);

        virtual void Stop();

        virtual void Join();

        virtual unsigned int Run() = 0;

        bool IsRunning() { return !m_bStop && m_hThread != 0; }

protected:
        void Sleep(unsigned int uiTimeMs);

        void Sleep(unsigned int uiTotalMs, unsigned int uiIntervalMs);

protected:
#if defined _WIN32
        HANDLE m_hThread;
#else
        pthread_t m_hThread;
#endif
        bool m_bStop;
};

        可以看到,我们通过_WIN32宏定义来区分当前是Windows操作系统还是Linux操作系统。如果是Windows操作系统,我们声明了一个受保护的类型为HANDLE的成员变量m_hThread;否则,我们声明了一个受保护的类型为pthread_t的成员变量m_hThread。成员变量m_bStop用于标识当前线程是否已经停止运行,在启动线程、停止线程时,我们会给该变量赋值。

        CHP_BaseThread类的公共接口有5个,下面分别进行介绍。

        Start:开启线程。参数uiStackSize为栈大小,Linux系统有效,为0时,默认为100KB。

        Stop:停止线程,会释放掉线程资源。

        Join:等待线程结束。

        Run:线程的实际运行函数,为纯虚函数,派生类必须实现该接口。线程的返回值为整型,一般返回0即可。

        IsRunning:判断线程是否正在运行。

        另外,CHP_BaseThread类还有两个受保护的成员函数,一般用于在派生类的Run函数中执行睡眠操作。

        Sleep(uiTimeMs):让CPU睡眠一段时间,适用于较短时间的睡眠。参数uiTimeMs为睡眠的时间,单位为毫秒。

        Sleep(uiTotalMs, uiIntervalMs):让CPU睡眠一段时间,适用于较长时间的睡眠。如果停止了线程,该接口在单次的睡眠时间到期后,会停止睡眠。uiTotalMs为总的睡眠时间,单位为毫秒。uiIntervalMs为每次的睡眠时间,单位为毫秒。

总结

        多线程编程常用于提高应用程序性能,特别是在多核处理器环境下,通过将工作负载分解到多个并发执行的线程上,可以实现并行计算和异步处理等功能。文章来源地址https://www.toymoban.com/news/detail-858726.html

到了这里,关于超级好用的C++实用库之线程基类的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • C++虚基类

    如果一个派生类是从多个基类派生出来的,而这些基类又有一个共同的基类,则在这个派生类中访问这个共同的基类中的成员时,可能会产生二义性。 比如有以下结构 以下程序会报错,因为a具有二义性。 能够看到a被初始化了两次,我们希望a只被再第一次初始化以后就不再

    2024年02月08日
    浏览(45)
  • C++ | 继承(基类,父类,超类),(派生类,子类)

    文章参考:https://blog.csdn.net/war1111886/article/details/8609957 一 .继承中的访问权限关系 1.基类,父类,超类是指被继承的类,派生类,子类是指继承于基类的类.  2.在C++中使用: 冒号表示继承,如class A : public B;表示派生类A从基类B继承而来 3.派生类包含基类的所有

    2024年02月15日
    浏览(42)
  • C++的基类和派生类构造函数

    基类的成员函数可以被继承,可以通过派生类的对象访问,但这仅仅指的是普通的成员函数,类的构造函数不能被继承。构造函数不能被继承是有道理的,因为即使继承了,它的名字和派生类的名字也不一样,不能成为派生类的构造函数,当然更不能成为普通的成员函数。

    2024年02月10日
    浏览(48)
  • Linux基础(超级无敌认真好用)

    1 Linux概述 Linux是一种自由和开放源码的类UNIX操作系统,存在着许多不同的Linux版本,但它们都使用了Linux内核。 Linux是在1991年由林纳斯·托瓦兹在赫尔辛基大学上学时创立的,主要受到 Minix和Unix思想的启发。 Linux可安装在各种计算机硬件设备中,比如手机、平板电脑、路由器

    2023年04月19日
    浏览(41)
  • 记录--九个超级好用的 Javascript 技巧

    在实际的开发工作过程中,积累了一些常见又超级好用的 Javascript 技巧和代码片段,包括整理的其他大神的 JS 使用技巧,今天筛选了 9 个,以供大家参考。 在一些特殊的场景下,特别是一些库和框架的开发中,我们有时会去动态的加载 JS 文件并执行,下面是利用 Promise 进行

    2024年02月05日
    浏览(47)
  • 分享一个超级好用的ai绘画网站

    工作学习,有时候需要画图 https://beta.dreamstudio.ai/dream 直接输入需求即可

    2024年02月16日
    浏览(45)
  • 【C++入门到精通】C++入门 —— 继承(基类、派生类和多态性)

    前面我们讲了C语言的基础知识,也了解了一些数据结构,并且讲了有关C++的命名空间的一些知识点以及关于C++的缺省参数、函数重载,引用 和 内联函数也认识了什么是类和对象以及怎么去new一个 ‘对象’ ,也了解了C++中的模版,以及学习了几个STL的结构也相信大家都掌握

    2024年02月11日
    浏览(48)
  • ChatGPT本地部署(支持中英文,超级好用)!

    今天用了一个超级好用的Chatgpt模型——ChatGLM,可以很方便的本地部署,而且效果嘎嘎好,经测试,效果基本可以平替内测版的文心一言。 目录 一、什么是ChatGLM? 二、本地部署 2.1 模型下载 2.2 模型部署 2.3 模型运行 2.3.1 直接在命令行中输入进行问答 2.3.2 利用 gradio 库

    2023年04月14日
    浏览(56)
  • 超级好用绘图工具(Draw.io+Github)

    绘图工具:Draw.io 存储方式: Github ​是一款免费开源的在线流程图绘制软件,可以用于创建流程图、组织结构图、网络图、UML图等各种类型的图表。它提供了丰富的图形元素和编辑功能,使用户能够轻松地创建和编辑图表。 ​:开源、简洁、方便、全平台、免费 ​

    2024年02月08日
    浏览(40)
  • 超级好用编辑器 Sublime 配置与插件

    {anote icon=“” href=“https://www.jianshu.com/p/13fedee165f1” type=“secondary” content=“关于主题”/} 下载:https://github.com/titoBouzout/BufferScroll {dotted startColor=“#ff6c6c” endColor=“#1989fa”/} {mtitle title=“次要的”/} {dotted startColor=“#ff6c6c” endColor=“#1989fa”/}

    2024年02月16日
    浏览(54)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包