windows程序设计:多任务与多线程

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

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

 

创建线程: 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。

<script type=text/javascript charset=utf-8 src="http://static.bshare.cn/b/buttonLite.js#style=-1&uuid=&pophcol=3&lang=zh"></script> <script type=text/javascript charset=utf-8 src="http://static.bshare.cn/b/bshareC0.js"></script>
阅读(71) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~
评论热议
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值