zoukankan      html  css  js  c++  java
  • Ice 线程与并发 C++

    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!=、operator< 这些函数比较两个线程的ID,目的是能降Thread对象用于有序的STL容器。

    5)特别注意:必须在堆上分配Thread对象,才能够释放正确。

    2.ThreadControl类

    2.1概述

    start方法返回的是类型为ThreadControl对象,指向发出调用的线程

    2.2其成员函数

    1)ThreadControl:缺省构造器返回一个ThreadControl对象,指向发出调用的线程。

    2)id:该函数返回每个线程的唯一标识符,类型是ThreadID。

    3)join:这个方法挂起发起调用的线程,直到join所针对的线程终止为止。例如:

    IceUtil::ThreadPtr t = new ReaderThread; // Create a thread
    IceUtil::ThreadControl tc = t->start(); // 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!=、operator< :和上面thread一样.

  • 相关阅读:
    解决"waitForCondition(LockCondition) timed out (identity=23, status=0). CPU may be pegged. trying again."问题
    解决:“MediaPlayer error (1, -2147483648)”问题
    EasyUI 验证
    ANT简明教程[转载]
    [转]Android开源框架ImageLoader的完美例子
    [转]Android精品开源项目整理
    【转】25个非常实用的jQuery/CSS3应用组件
    [转]8款实用的jQuery/CSS3最新插件应用
    解决IE6下浮层遮盖select刺穿的问题
    jQuery AJAX中文乱码处理
  • 原文地址:https://www.cnblogs.com/lasnitch/p/12764118.html
Copyright © 2011-2022 走看看