正规网站建设推荐谁好呢phpcms调用网站名称
web/
2025/9/25 18:29:21/
文章来源:
正规网站建设推荐谁好呢,phpcms调用网站名称,群团组织网站建设,wordpress logo.svg之前笔者几篇文章介绍了改线程类的文章. 关联文章的地址 几年前写过一个C的多线程框架#xff0c;虽然写完了#xff0c;但是人一懒做了一次说明以后就没影了#xff0c;最近把代码整顿了一下#xff0c;预备发到github上#xff0c;在这里#xff0c;再把这个框架总结一… 之前笔者几篇文章介绍了改线程类的文章. 关联文章的地址 几年前写过一个C的多线程框架虽然写完了但是人一懒做了一次说明以后就没影了最近把代码整顿了一下预备发到github上在这里再把这个框架总结一下吧。 多线程始终是编程中常见的问题特别是在Linux的c上多线程的封装始终不是很好当然有很多第三方库可以用比如boost之类的但是我们有时候并不须要那么庞大的库只须要一个轻量级的线程框架就好了于是自己编了一个现在只在Linux下用了但是设计的时候是按照多平台来编的如果你有须要可以自己添加一些个类把他酿成一个windows平台获得其他平台的比如eCos,Vxworks等等。。 对于多线程我们须要的是把操作系统底层封装起来让用户编写程序的时候更多的存眷他的代码逻辑而不是线程之间的逻辑最好是new一个类以后就启动了一个线程线程之间的通信也有相应的类封装起来只要调用就好了。 根据这些我们定义了一组基类来封装各种多线程的接口 操作系统基类该类主要定义了createThread函数来创立线程该函数是纯虚函数继承自它的类须要根据平台实现其功能 class COperatingSystem
{public:COperatingSystem();~COperatingSystem();virtual bool createThread(CThread *mThread,unsigned long stack_size8*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 *pNameNULL);}; 信号量基类纯虚函数定义了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 *anew TestThread(Thread A); OK一切搞定当初运行就可以不停的打出hello world了。 同样你也可以new多个实例 如果想要其他功能的线程你再从CThread派生一个其他类就好了很简略吧。 略微庞杂一点的是线程通信下次说。 代码还没有整顿完成等整顿完成了一并传到github上大概还须要两三天时间吧。 文章结束给大家分享下程序员的一些笑话语录 人脑与电脑的相同点和不同点人脑会记忆数字电脑也会记忆数字人脑会记忆程序电脑也会记忆程序但是人脑具有感知能力这种能力电脑无法模仿人的记忆会影响到人做任何事情但是电脑只有程序软件。比尔还表示人脑与电脑之间最重要的一个差别就是潜意识。对于人脑存储记忆的特别之处比尔表示人脑并不大但是人脑重要的功能是联络人脑会把同样的记忆存储在不同的地方因此记忆读取的速度就不相同而这种速度取决于使用的频率和知识的重要性。人脑的记忆存储能力会随着年龄增长而退化同时记忆的质量也会随着年龄退化。经典语录网 转载于:https://www.cnblogs.com/xinyuyuanm/archive/2013/05/22/3093760.html
本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/web/81762.shtml
如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!