Chinaunix首页 | 论坛 | 博客
  • 博客访问: 261694
  • 博文数量: 71
  • 博客积分: 0
  • 博客等级: 民兵
  • 技术积分: 920
  • 用 户 组: 普通用户
  • 注册时间: 2013-08-16 13:07
个人简介

我喜欢蓝天,也喜欢雨天。

文章分类

全部博文(71)

文章存档

2014年(14)

2013年(57)

分类: Windows平台

2013-08-27 16:16:15

主线程处理用户输入(和其他消息),并创建进程中的其他进程,这些附加的线程完成与用户无关的任务。

一个程序中的线程是同一进程的不同部分,因此它们共享进程的资源(内存、打开的文件等),共享静态变量。而每个线程都有自己的堆栈,因此动态变量对每个线程是唯一的。每个线程还有它自己的处理器状态,这个状态在进行线程切换期间被保存和恢复。

 

创建线程: hThread = CreateThread();

hThread = _beginthread();

_endthread();

 

sleep

 

临界区

临界区是一块不可中断的代码。

一个临界区对象:CRITICAL_SECTION类型的全局变量。如:CRITICAL_SECTION  cs;。这个临界区对象必须首先被程序中的某个线程初始化,通过调用InitializeCriticalSection (&cs); 创建一个名为cs的临界区对象。

进入临界区:EnterCriticalSection (&cs);此时,线程被认为“拥有”临界区对象。

离开临界区:LeaveCriticalSection (&cs);

删除临界区:DeleteCriticalSection (&cs);

临界区只能用于在同一个进程内的线程之间的协调,要协调两个不同进程对同一资源的共享,用“互斥对象(mutex object)”技术。

 

事件对象

在程序的整个生存期内保持线程的运行,但是必要时才激活它。

创建事件对象:hEvent = CreateEvent (&sa, fManual, fInitial, pszName); 事件对象被初始化为有信号, 就将fInitial设置为FALSE;

置位一个现存的事件对象:SetEvent(hEvent);

复位一个现存的事件对象:ResetEvent(hEvent);

WaitForSingleObject(hEvent, dwTimeOut);

 

线程局部存储:

如果需要在一个线程内部的各个函数调用都能访问、但其它线程不能访问的变量(被称为static memory local to a thread 线程局部静态变量),就需要新的机制来实现。这就是TLS。

阅读(747) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~