JThread使用说明

1介绍

        许多项目中我们使用到线程。为了在unix和MS_Windows平台下使用一样的代码,我决定在这些平台上将已存在的线程函数封装成一个简单的类。

        JThread包是很简单的:当然它仅仅包含三个类:分别被命名为JThread, JMutex 和JMutexAutoLock,从它们的名称上可以想到:JThread表示一个线程JMutex表示一个互斥体,线程类仅仅包含很基本的函数,例如:开始或结束一个线程。

 

2使用

        下面是JThread的描述,JMutex和JMutexAutoLock类。注意函数的返回类型int总是返回0及大于0的值表示成功,负值表示出现了问题。

 

2.1 JMutex

        下面是类JMutex的定义。在你能够使用一个这种类型的实例之前,你首先必须调用Init函数。你通过检测IsInitialized的返回值可以检测到互斥体是否已经初始化。初始化之后,通过调用Lock和Unlock函数可以使互斥体锁定和解锁。

         class JMutex

         {

          public:

                  JMutex();

                  ~JMutex();

                  int Init();        

                  int Lock();

                  int Unlock();

                  bool IsInitialized();  

         };

 

2.1 JMutexAutoLock

         下面是JMutexAutoLock的定义。他的目的是更容易实现线程安全函数,不用去担心什么时候为互斥体解锁。

         class JMutesAutoLock

         {

          public:

                  JMutexAutoLock(JMutex &m); 

                  ~JMutexAutoLock();

          };

 

          void MyClass::MyFunction()

          {

                   JMutexAutoLock autoLock(m_myMutex);                                         

                   //在这做互斥保护

          }

                  当autolock变量被创建时,他自动锁定在结构中指定的互斥体m_myMutex。autoLock 变量的析构函数确保lock被释放。

 

2.3 JThread

         为了创建你自己的线程,你不得不从JThread继承一个类,下面是描述。在你的继承类里,你必须实现一个成员函数Thread,这将要在新的线程里执行。在你的自己的线程实现中应当调用ThreadStarted.

          为了启动你的线程,你只要简单的调用Start函数。当你自己的Thread函数已经拿户被ThreadStarted调用时,这个函数完成。这是因为,当Start函数完成时,你能确保你自己的Thread能真正的立即运行起来。

          你能检测线程是否在运行,可以通过调用IsRunning函数。如果线程已经完成,通过调用GetReturnValue能检测到返回值,最后你能通过kill函数结束它。

           你要小心使用kill函数:当线程正在为一个互斥体工作时(例如一个网络互斥体)。当你确信线程被留在一些循环里不能被结束的时候才可以使用Kill函数。

            class JThread

            {

            public:

                      JThread();

                      virtual ~JThread();

                     int Start();

                     int Kill();

                     virtual void * Thread() = 0;

                     bool IsRunning();    

                     void * GetReturnValue();

            protected:

                     void ThreadStarted();

          

        

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 2
    评论
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值