几年前写过一个C++的多线程框架,虽然写完了,但是人一懒做了一次说明以后就没影了,最近把代码整理了一下,准备发到github上,在这里,再把这个框架总结一下吧。
多线程一直是编程中常见的问题,特别是在Linux的c++上,多线程的封装一直不是很好,当然,有很多第三方库可以用,比如boost之类的,但是我们有时候并不需要那么庞大的库,只需要一个轻量级的线程框架就行了,于是自己编了一个,目前只在Linux下用了,但是设计的时候是按照多平台来编的,如果你有需要,可以自己添加一些个类,把他变成一个windows平台获取其他平台的,比如eCos,Vxworks等等。。
对于多线程,我们需要的是把操作系统底层封装起来,让用户编写程序的时候更多的关注他的代码逻辑而不是线程之间的逻辑,最好是new一个类以后,就启动了一个线程,线程之间的通信也有相应的类封装起来,只要调用就行了。
根据这些,我们定义了一组基类,来封装各种多线程的接口
操作系统基类,该类主要定义了createThread函数来创建线程,该函数是纯虚函数,继承自它的类需要根据平台实现其功能
class COperatingSystem { public: COperatingSystem(); ~COperatingSystem(); virtual bool createThread(CThread *mThread,unsigned long stack_size=8*1024)=0; virtual void sleepSec(unsigned long sec)=0; protected: CThread *p_thread; };
线程基类,定义了threadEntry来作为线程的入口,initializeThread来初始化线程,子类可以初始化不同的成员变量,mainLoop是纯虚函数,为线程的主函数,一般是一个while循环,子类必须实现该虚函数。
class CThread { public: CThread(const char *m_thread_name); ~CThread(); void threadEntry(CCountingSem *pSemaphore); protected: virtual bool initializeThread(); virtual void mainLoop()=0; COperatingSystem *p_opration_system; char *p_thread_name; };
为了平台的无关性,使用了简单工厂模式,用来根据不同的平台返回不同的操作系统类,信号量类和互斥类。
class COperatingSystemFactory { public: static COperatingSystem *newOperatingSystem(); static CCountingSem *newCountingSem(unsigned int init); static CMutex *newMutex(const char *pName=NULL); };
信号量基类,纯虚函数定义了get和post信号量方法,子类必须根据系统类型进行不同的实现
class CCountingSem { public: CCountingSem(); ~CCountingSem(); virtual bool Get(Mode mode = kForever, unsigned long timeoutMS = 0) = 0; virtual bool Post(void) = 0; };
互斥基类,纯虚函数定义了lock和unlock两个方法,同样,子类必须根据系统类型进行不同的实现
class CMutex { public: CMutex(const char *pName = NULL); ~CMutex(); virtual bool Lock()=0; virtual bool UnLock()=0; protected: char *mutex_name; };
还有一个重头是msgQueue类,下次说。
有了这些个基础类以后,我们就可以开始了。
我们希望的结果是
用户,也就是程序员啦,从CThread继承一个自己的线程类,比如CTestThread,然后实现mainLoop方法,这样,一个不考虑通信的线程就编写完了,然后我只需要在main.cpp中new一下这个CTestThread,那么线程就启动了,没有其他任何繁琐的操作。
要实现这样的功能,上面那些个类需要怎么样的组合调用呢?
首先,因为是在Linux下,所以所有的基类都要派生出Linux对应的子类(CThread不需要,因为是用户编写的,COperatingSystemFactory也不需要,因为是抽象工厂),所以,我们在Linux下创建了CLinuxMutex,CLinuxOperratingSystem,CLinuxCountingSem三个子类,并且在这些个子类中实现了基类中的纯虚函数。
接着,我们new 一个 CTestThread 后,需要通过COperatingSystemFactory的newOperatingSystem 生成一个CLinuxOperratingSystem,然后CLinuxOperratingSystem调用createThread产生一个线程函数,然后把CTestThread的mainLoop绑定到这个线程函数中。
对,就这么简单
在github中下载了所有的文件以后,你只需要编写你自己的线程类,如:
class TestThread:public CThread { public: TestThread(const char *m_name); ~TestThread(); virtual void mainLoop(); }; //然后实现mainLoop方法: void TestThread::mainLoop() { while(1) { printf("%s :hello world\n",p_thread_name); } }
然后在main.cpp中,调用一句话new一下这个类:
TestThread *a=new TestThread("Thread A");
OK,一切搞定,现在运行,就能不停的打出hello world了。
同样,你也可以new多个实例
如果想要其他功能的线程,你再从CThread派生一个其他类就行了,很简单吧。
稍微复杂一点的是线程通信,下次说。
代码还没有整理完成,等整理完成了一并传到github上,大概还需要两三天时间吧。
github地址:
https://github.com/wyh267/Cplusplus_Thread_Lib
以上就是C++ 多线程框架(1):new 一下就启动一个线程的内容,更多相关内容请关注PHP中文网(www.php.cn)!

C#和.NET运行时紧密合作,赋予开发者高效、强大且跨平台的开发能力。1)C#是一种类型安全且面向对象的编程语言,旨在与.NET框架无缝集成。2).NET运行时管理C#代码的执行,提供垃圾回收、类型安全等服务,确保高效和跨平台运行。

要开始C#.NET开发,你需要:1.了解C#的基础知识和.NET框架的核心概念;2.掌握变量、数据类型、控制结构、函数和类的基本概念;3.学习C#的高级特性,如LINQ和异步编程;4.熟悉常见错误的调试技巧和性能优化方法。通过这些步骤,你可以逐步深入C#.NET的世界,并编写高效的应用程序。

C#和.NET的关系是密不可分的,但它们不是一回事。C#是一门编程语言,而.NET是一个开发平台。C#用于编写代码,编译成.NET的中间语言(IL),由.NET运行时(CLR)执行。

C#.NET依然重要,因为它提供了强大的工具和库,支持多种应用开发。1)C#结合.NET框架,使开发高效便捷。2)C#的类型安全和垃圾回收机制增强了其优势。3).NET提供跨平台运行环境和丰富的API,提升了开发灵活性。

C#.NETisversatileforbothwebanddesktopdevelopment.1)Forweb,useASP.NETfordynamicapplications.2)Fordesktop,employWindowsFormsorWPFforrichinterfaces.3)UseXamarinforcross-platformdevelopment,enablingcodesharingacrossWindows,macOS,Linux,andmobiledevices.

C#和.NET通过不断的更新和优化,适应了新兴技术的需求。1)C#9.0和.NET5引入了记录类型和性能优化。2).NETCore增强了云原生和容器化支持。3)ASP.NETCore与现代Web技术集成。4)ML.NET支持机器学习和人工智能。5)异步编程和最佳实践提升了性能。

c#.netissutableforenterprise-levelapplications withemofrosoftecosystemdueToItsStrongTyping,richlibraries,androbustperraries,androbustperformance.however,itmaynotbeidealfoross-platement forment forment forment forvepentment offependment dovelopment toveloperment toveloperment whenrawspeedsportor whenrawspeedseedpolitical politionalitable,

C#在.NET中的编程过程包括以下步骤:1)编写C#代码,2)编译为中间语言(IL),3)由.NET运行时(CLR)执行。C#在.NET中的优势在于其现代化语法、强大的类型系统和与.NET框架的紧密集成,适用于从桌面应用到Web服务的各种开发场景。


热AI工具

Undresser.AI Undress
人工智能驱动的应用程序,用于创建逼真的裸体照片

AI Clothes Remover
用于从照片中去除衣服的在线人工智能工具。

Undress AI Tool
免费脱衣服图片

Clothoff.io
AI脱衣机

AI Hentai Generator
免费生成ai无尽的。

热门文章

热工具

Dreamweaver Mac版
视觉化网页开发工具

记事本++7.3.1
好用且免费的代码编辑器

mPDF
mPDF是一个PHP库,可以从UTF-8编码的HTML生成PDF文件。原作者Ian Back编写mPDF以从他的网站上“即时”输出PDF文件,并处理不同的语言。与原始脚本如HTML2FPDF相比,它的速度较慢,并且在使用Unicode字体时生成的文件较大,但支持CSS样式等,并进行了大量增强。支持几乎所有语言,包括RTL(阿拉伯语和希伯来语)和CJK(中日韩)。支持嵌套的块级元素(如P、DIV),

安全考试浏览器
Safe Exam Browser是一个安全的浏览器环境,用于安全地进行在线考试。该软件将任何计算机变成一个安全的工作站。它控制对任何实用工具的访问,并防止学生使用未经授权的资源。

适用于 Eclipse 的 SAP NetWeaver 服务器适配器
将Eclipse与SAP NetWeaver应用服务器集成。