[VC]线程

是进程中的一个实体,是被系统独立调度和分派的基本单位,线程自己不拥有系统资源,只拥有一点在运行中必不可少的资源,但它可与同属一个进程的其它线程共
享进程所拥有的全部资源。一个线程可以创建和撤消另一个线程,同一进程中的多个线程之间可以并发执行。由于线程之间的相互制约,致使线程在运行中呈现出间
断性。线程也有就绪、阻塞和运行三种基本状态。

  线程是程序中一个单一的顺序控制流程.在单个程序中同时运行多个线程完成不同的工作,称为多线程.

  线程和进程的区别在于,子进程和父进程有不同的代码和数据空间,而多个线程则共享数据空间,每个线程有自己的执行堆栈和程序计数器为其执行上下文.多线程主要是为了节约CPU时间,发挥利用,根据具体情况而定.
线程的运行中需要使用计算机的内存资源和CPU
  线程的周期
  新建 就绪 运行 阻塞 死亡
  线程调度与优先级

  有线程进入了就绪状态,需要有线程调度程序来决定何时执行,根据优先级来调度.
  线程组

  每个线程都是一个线程组的一个成员,线程组把多个线程集成一个对象,通过线程组可以同时对其中的多个线程进行操作.在生成线程时必须将线程放在指定的
线程组,也可以放在缺省的线程组中,缺省的就是生成该线程的线程所在的线程组.一旦一个线程加入了某个线程组,不能被移出这个组.
  守护线程

  是特殊的线程,一般用于在后台为其他线程提供服务.
  isDaemon():判断一个线程是否为守护线程.

  set Daemon():设置一个线程为守护线程.
  Thread类和Runnable接口
  Thread类

  类Thread在包java.lang中定义,它的构造方法如下:
  public Thread();
  public
Thread(Runnable target);
  public Thread(Runnable target,String
name);
  public Thread(String name);
  public Thread(ThreadGroup
group,Runnable target);
  public Thread(ThreadGroup group, String
name);
  主要方法
  isActive() 判断是否处于执行状态
  Suspend() 暂停执行

  reSume 恢复执行
  start() 开始执行
  Stop() 停止执行
  sleep() 睡眠

  run() 程序体
  yield() 向其他线程退让运行权
  线程优先级
  Public
statuc final int MAX_PRIORITY最高优先级,10
  Public statuc final int
MIN_PRIORITY最低优先级,1
  Public statuc final int NORM_PRIORITY普通优先级,5

  Runnable接口
  Runnable接口中只定义了一个方法run()作为线程体,
  void run()

  Java的线程是通过java.lang.Thread类来实现的。
  VM启动时会有一个由主方法(public static
void main(){})所定义的线程。
  可以通过创建Thread的实例来创建新的线程。

  每个线程都是通过某个特定的Thread对象所对应的方法run()来完成其操作的,方法run()称为线程体。

  通过调用Thread类的start()方法来启动一个线程
  Java里面实现多线程,有2个方法
  1 继承
Thread类,比如
  class MyThread extends Thread {
  public void run()
{
  // 这里写上线程的内容
  }
  public static void main(String[] args)
{
  // 使用这个方法启动一个线程
  new MyThread().start();
  }
  }

  2 实现 Runnable接口
  class MyThread implements Runnable{
  public
void run() {
  // 这里写上线程的内容
  }
  public static void
main(String[] args) {
  // 使用这个方法启动一个线程
  new Thread(new
MyThread()).start();
  }
  }

  一般鼓励使用第二种方法,应为Java里面只允许单一继承,但允许实现多个接口。第二个方法更加灵活。

时间: 2024-12-24 10:00:09

[VC]线程的相关文章

【转】VC 线程间通信的三种方式

原文网址:http://my.oschina.net/laopiao/blog/94728 1.使用全局变量(窗体不适用)      实现线程间通信的方法有很多,常用的主要是通过全局变量.自定义消息和事件对象等来实现的.其中又以对全局变量的使用最为简洁.该方法将全局变量作为线程监视的对象,并通过在主线程对此变量值的改变而实现对子线程的控制.      由于这里的全局变量需要在使用它的线程之外对其值进行改变,这就需要通过volatile关键字对此变量进行说明.使用全局变量进行线程通信的方法非常简单

VC++线程同步(三) 临界区使用例子

临界区(Crtical Section)同步对象 用户模式下的同步对象 Win32中,最容易使用的一个同步机制就是(关键段)Critical Section, 某些共享资源具有互斥性,也就是它要求被互斥地使用,他也是用于资源的互斥, 在大部分情况下,使用临界区替换Mutex(Mutex是内核模式下的同步对象). 局限性:他只能用于同步单个进程中的线程. 在任何同步机制当中,无论是哪个操作系统下,都不要 长时间的锁住资源,如果一直锁定资源,就会一致阻止其他线程的执行, 使整个程序,处于完全停止的状

VC++线程同步(二) Mutex互斥量的例子

同步对象使用实例 Win32窗口的建立: 我们将要学习的使用,分别是:互斥量,临界区,事件,信号量.所以我们需要一个窗口,呈现四种四种同步对象状态. 首先创建一个Win32项目,不要选空项目; 我们需要四个小窗口,先找到注册主窗口的代码. ATOM MyRegisterClass(HINSTANCE hInstance) { WNDCLASSEX wcex; wcex.cbSize = sizeof(WNDCLASSEX); wcex.style= CS_HREDRAW | CS_VREDRAW

VC++线程同步(五) 信号量使用例子

信号量(Semaphore) 信号量是内核对象,使用几个形象的例子,进行描述. 1 假设有5个位置,而外面有很多人要进来,那么当5个位置被人占用了 后,其他人就必须排队等待,每个人使用时间不同,5个占用的位置,其中有两个完成了,那么,排队的人中,最前面的两个人进行可以使用,但是最多就是5个人同时能够使用,这就是信号量. 2 例如我们在服务器中创建了一个线程池,它由5个线程组成,也就意味着,最多同时处理5个请求,一旦超过5个,那么请求就放入缓冲中,当一个或多个请求(最多5个)完成后,那么从缓冲中拿

VC++线程同步(四) 事件使用例子

事件(Event)同步对象 (内核级别)事件内核对象包含: 1 一个使用计数器 2 一个表示事件是否是自动重置还是手动重置的布尔值 3 一个表示事件有没有被触发的布尔值 4 当触发为true时,等待该事件的线程变为可调度状态 5 事件的触发表示一个操作已经完成 作用: 通知其他线程,我已经完成读写操作了,轮到你们来做了. 他分为两种类型: 1是手动重置事件,也就是要进行手动的触发和非触发状态的切换. 2是自动重置事件,这种情况下只需要设置触发事件,不用管什么时候切换触发状态. 尽量使用手动重置方

VC++ 线程同步 总结

注:所谓同步,并不是多个线程一起同时执行,而是他们协同步调,按预定的先后次序执行. 与线程相关的基本函数包括:CreateThread:创建线程CloseHandle:关闭线程句柄.注意,这只会使指定的线程句柄无效(减少该句柄的引用计数),启动句柄的检查操作,如果一个对象所关联的最后一个句柄被关闭了,那么这个对象会从系统中被删除.关闭句柄不会终止相关的线程. 线程是如何运行的呢?这又与你的CPU有关系了,如果你是一个单核CPU,那么系统会采用时间片轮询的方式运行每个线程:如果你是多核CPU,那么

QThead实现模拟VC线程函数

// 头文件 #ifndef QTHREADBASE_H #define QTHREADBASE_H #include <iostream> #include <stdlib.h> #include <qmutex.h> #include <Qthread.h> #include <list> #ifdef _MAC #define CALLBACK PASCAL #define WINAPI CDECL #define WINAPIV CDEC

VC 线程模型 初始化 、销毁 、驱动,事件与临界区

测试代码: 1 //线程模型开始,都可以作为类的成员变量 2 HANDLE m_hLogThread; 3 CEvt m_evLogList; 4 CCriSec m_csLogList; 5 //等待线程消息 6 void WaitForWriteLogThreadComplete() 7 { 8 m_evLogList.Set(); 9 VERIFY(::WaitForSingleObject(m_hLogThread, INFINITE) == WAIT_OBJECT_0); 10 11

VC 线程池

参照:http://www.cnblogs.com/kzloser/archive/2013/03/11/2909221.html 参照:http://blog.csdn.net/pjchen/article/details/170606