您当前的位置: 首页 >  c++

phymat.nico

暂无认证

  • 1浏览

    0关注

    1967博文

    0收益

  • 0浏览

    0点赞

    0打赏

    0留言

私信
关注
热门博文

Ice笔记--C++线程与并发(二)

phymat.nico 发布时间:2018-01-19 20:16:38 ,浏览量:1

线程

1.Thread类

    1.1概述

          Ice中的基础线程是由ThreadControl类和Thread类来提供的(在IceUtil/IceUtil.h中定义):

          Thread类是一个抽象基类,拥有一个纯虚方法run。要创建线程,必须特化Thread类,并实现run方法。

      1.2 其成员函数            1)id:该函数返回每个线程的唯一标识符,类型是ThreadID。在调用start函数之前调用它时,会引发ThreadNotStartedException。

           2)start:这个成员函数启动新创建的线程,会调用run方法。start方法同时负责引用计数的加减。

           3)getThreadControl:这个成员函数返回它所在的线程控制对象。在调用start之前调用它同样会触发异常。

           4)operator== 、operator!=、operatorstart(); // Start it                    tc.join(); // Wait for it

           4)detach

                   这个方法分离一个线程。一旦线程分离,就不能再融合;因此必须保证线程在程序离开main函数之前终止。

           5)isAlive:如果底层的线程还没有退出(run方法还没有完成),该方法就返回真。该方法在实现非阻塞的join时很有用。

           6)sleep:这方法挂起线程,时间长度由Time决定。挂起线程就是让该线程离开CPU,让其他线程占用。

           7)yield:这个方法使得它所针对的线程放弃CPU,让其他线程运行。看了它的代码,发现yield的效果等于Sleep(0)。

           8)operator== 、operator!=、operator10)  

  •         {  
  •             try{  
  •                 ++_waitingWriters;  
  •                 wait();  
  •                 --_waitingWriters;  
  •             }catch(...){  
  •                 --_waitingWriters;  
  •                 throw;  
  •             }  
  •         }  
  •         _q.push_back(item);  
  •           
  •         if(_waitingReaders||_waitingWriters)  
  •         {  
  •             notify();  
  •         }  
  •     }  
  •   
  •     T get()  
  •     {  
  •         IceUtil::Monitor::Lock lock(*this);         
  •   
  •         while(_q.size() == 0)  
  •         {  
  •             try{  
  •                   
  •                 ++_waitingReaders;  
  •                 wait();  
  •                 --_waitingReaders;  
  •             }catch (const IceUtil::Exception &e)  
  •             {  
  •                 --_waitingReaders;  
  •                 throw;  
  •             }  
  •         }  
  •         T item = _q.front();  
  •         _q.pop_front();  
  •         return item;  
  •     }  
  • private:  
  •     list _q;  
  •     short _waitingReaders;  
  •     short _waitingWriters;  
  • };  
  •   
  • #endif  
  • //myMain.cpp文件

    [cpp] view plain copy
    1. #include   
    2. #include  
    3. #include  
    4.   
    5. Queue q;  
    6.   
    7. class ReaderThread : public IceUtil::Thread  
    8. {  
    9.     virtual void run()  
    10.     {  
    11.         for(int i=0 ; i
    关注
    打赏
    1659628745
    查看更多评论
    立即登录/注册

    微信扫码登录

    0.0507s