望麓自卑—湖南大学最具潜力的校园传媒

 找回密码
 注册

QQ登录

只需一步,快速开始

查看: 1316|回复: 0

线程编程点滴

[复制链接]
发表于 2004-9-26 16:56:21 | 显示全部楼层 |阅读模式
UI线程必须含有消息循环。编写UI线程时,是从MFC的CWinThread类派生一个定制线程类
开始,而
不是从编写一个调用AfxBeginThread()函数的线程开始的。所以定制线程类必须重载In
itInstance()
函数。该函数用来执行初始化任务(第一次创建线程时,MFC 将调用InitInstance()函数
。最好还是重载
ExitInstance()函数以便线程能够在结素后消除自身.
线程不能自我唤醒。挂起的线程不花费处理器的时间,必须有另外的线程来代替它调用
ResumeThread()
对于每一个线程,Windows控制一个挂起数目。SuspendThread()和ResumeThread()都返回
先前的挂起数。
可以通过重复调用ResumeThread()直到挂起数返回1时继续执行线程。
在一个启动函数中调用AfxBeginThread启动工作者线程或者用户界面线程之后,控制权
并没有交给刚启动
的线程。必须当启动函数结束后,线程才有可能由等待状态进入运行状态。
线程可以调用API函数::Sleep()使它自己休眠。休眠的线程不使用处理器时间,并且在
一个约定毫秒数后
自动被唤醒。例如:
::Sleep(1000);
使用::Sleep是为了执行那些活动基本上是基于时间的线程。
另一个用途是收回余下的时间片,下面的语句挂起当前的线程,然后让调度程序运行其
他具有相同优先级
的线程.
::Sleep(0); 如果没有相同优先级的线程在等待运行,调度程序将继续执行当前线程.
线程为了判断自身运行的安全性,它可以监视事件对象的信号状态。利用MFC可以创建自
动或手动事件对象.
要创建事件对象,通常需要创建一个全局的CEvent对象: CEvent eventObj;
CEvent构造函数的第一个参数缺省为FALSE,设定事件的开始状态为沉寂状态.
为能够在程序中使用CEvent类(以及其他线程同步类),必须在引用CEvent类的文件中添加
#include \"afxmt.h\"
此为利用全局变量来进行程序和线程的通讯。也可以采用事件取代全局变量来进行这种
类型的通信。这种
技术更安全
由于每个线程实例都有自己的堆栈,因此对局部变量而言不存在什么问题,但是全局变
量和静态变量就
存在问题.
////////////////////////////////////////////////////////////////////////////
///////
CCriticalSection临界区段对象是一种可以解锁共享资源的关键字。线程拥有临界区段
时,如果其他线程要
访问这个被锁定的资源,那么他们必须将自己挂起,直到第一个线程停止使用关键字为
止。
线程想访问共享资源时,会调用临界区段的成员函数,该函数会将资源关键字交给调用
线程(假设没有其他线程
已经拥有该临界段):  criticalSection.Lock();
如果其他线程已经锁定了该临界区段,那么调用线程都会处于阻塞状态。调用线程完成
对共享资源的处理后
需要释放临界段对象:  criticalSection.Unlock();
////////////////////////////////////////////////////////////////////////////
//////////
互斥量与使用临界区段的最大区别在于临界段只能用于进程内的通信;互斥量可以用于多
个线程间的通信。可以
使用互斥量在不同程序间进行资源同步. CMutex,可以在应用程序中创建一个全局对象互
斥量.
在程序即将访问共享时,调用对象的Lock()成员函数.程序完成对共享资源的访问后,调
用对象的Unlock()成员函数.
////////////////////////////////////////////////////////////////////////////
/////////////////////
信号量能够限制应用程序中访问同一资源的线程数,这与临界段或互斥量在某一时刻只
能让一个线程访问资源有很大
的区别。信号量以初始资源数和最大资源数开始,该初始资源数代表信号量当前的状态
;最大资源数表示能够
同时访问同一资源的最大线程数。信号量可以用于单或多进程间的线程同步。每当线程
锁定一个信号量时信号量
都会将其资源数减一。减到零后,任何试图锁定共享资源的其他线程都会被阻塞,并且
要等到有线程释放信号量时
才能恢复.如果要在进程间使用信号量,还必须设置信号量名.
您需要登录后才可以回帖 登录 | 注册

本版积分规则

关闭

每日推荐上一条 /1 下一条

小黑屋|手机版|湖南大学望麓自卑校园传媒 ( 湘ICP备14014987号 )

GMT+8, 2024-11-24 04:03 , Processed in 0.573158 second(s), 21 queries , Gzip On.

Powered by Discuz! X3.4

Copyright © 2001-2020, Tencent Cloud.

快速回复 返回顶部 返回列表