数。为了保证多线程情况下的安全,C runtime 函数库必须为每一个执行线程做一些簿记工
作。没有这些工作,C runtime 函数库就不知道要为每一个执行线程配置一块新的内存,
做为执行线程的区域变量用。因此,CreateThread 有一个名为_beginthreadex 的外包函数,
负责额外的簿记工作。
请注意函数名称的底线符号。它必须存在,因为这不是个标准的ANSI C runtime 函数。
_beginthreadex 的参数和CreateThread 的参数其实完全相同,不过其型别已经被「净化」
了,不再有Win32 型别包装。这原本是为了要让这个函数能够移植到其它操作系统,因
为微软希望_beginthreadex 能够被实作于其它平台,不需要和Windows 有关、不需要
包含windows。h 。但实际情况是,你还是得调用CloseHandle 以关闭执行线程, 而
CloseHandle 却是个Win32 API ,所以你还是需要包含windows。h 、还是和Windows 脱
离不了关系。微软空有一个好主意,却没能落实它。
把_beginthreadex 视为CreateThread 的一个看起来比较有趣的版本,就对了:
unsigned long _beginthreadex (
void *security;
unsigned stack_size;
unsigned (__stdcall *start_address)(void *);
void *arglist;
unsigned initflag;
unsigned* thrdaddr
);
_beginthreadex 所传回的unsigned long 事实上就是一个Win32 HANDLE ,指向新执行
线程。换句话说传回值和CreateThread 相同,但_beginthreadex 另外还设立了errno 和
doserrno 。
下面是一个最简单的使用范例:
#0001 #include
#0002 #include
46
…………………………………………………………Page 109……………………………………………………………
#0003 unsigned __stdcall myfunc(void* p);
#0004
#0005 void main()
#0006 {
#0007 unsigned long thd;
#0008 unsigned tid;
#0009
#0010 thd = _beginthreadex(NULL;
#0011 0;
#0012 myfunc;
#0013 0;
#0014 0;
#0015 &tid );
#0016 if (thd != NULL)
#0017 {
#0018 CloseHandle(thd);
#0019 }
#0020 }
#0021
#0022 unsigned __stdcall myfunc (void* p)
#0023 {
#0024 // do your job。。。
#0025 }
针对Win32 API ExitThread ,也有一个对应的C runtime 函数:_endthreadex 。它只需要
一个参数,就是由_beginthreadex 第6个参数传回来的ID 值。
关于_beginthreadex 和_endthreadex ,以及执行线程的其它各种理论基础、程序技术、使
用技巧,可参考由Jim Beveridge & Robert Wiener 合着,Addison Wesley 出版的
Multithreading Applications in Win32 Win32 / /
一书( 多线程程序设计 侯俊杰译 峰出
版)。
47
…………………………………………………………Page 110……………………………………………………………
执行线程优先权 ( y)
Priorit
优先权是排程的重要依据。优先权高的执行线程,永远先获得CPU 的青睐。当然啦,操作
系统会视情况调整各个执行线程的优先权。例如前景执行线程的优先权应该调高一些,背
景执行线程的优先权应该调低一些。
0 31
执行线程的优先权范围从 (最低)到 (最高)。当你产生执行线程,并不是直接以数值
指定其优先权,而是采用两个步骤。第一个步骤是指定「优先权等级(Priority Class )」
给进程,第二步骤是指定「相对优先权」给该进程所拥有的执行线程。图1…7 是优先权等
级的描述,其中的代码在CreateProcess 的dwCreationFlags 参数中指定。如果你不指
NORMAL PRIORIT Y CLASS …
_ _
定, 系统预设给的是 除非父进程是
IDLE PRIORIT Y CLASS IDLE PRIORIT Y CLASS
_ _ _ _
(那么子进程也会是 )。
等级 代码 优先权值
idle IDLE_PRIORITY_CLASS 4
9 7
normal NORMAL_PRIORITY_CLASS (前景)或 (背景)
high HIGH_PRIORITY_CLASS 13
realtime REALTIME_PRIORITY_CLASS 24
图 1…7 Win32 执 行 线 程 的优先权等级划分
■ 〃idle〃 CPU
等级只有在 时间将被浪费掉时(也就是前一节所说的空闲时间)
才执行。此等级最适合于系统监视软件,或屏幕保护软件。
■ 〃normal〃 〃normal〃
是预设等级。系统可以动态改变优先权,但只限于 等级。
9 7
当进程变成前景,执行线程优先权提升为 ,当进程变成背景,优先权降低为 。
■ 〃high〃 Ctrl+Esc
等级是为了立即反应的需要,例如使用者按下 时立刻把工作管
理器(task manager )带出场。
■ 〃realtime〃
等级几乎不会被一般应用程序使用。就连系统中控制鼠标、键盘、
48
…………………………………………………………Page 111……………………………………………………………
磁盘状态重新扫描、Ctrl+Alt+Del 等的执行线程都比〃realtime〃 优先权还低。这
种等级使用在「如果不在某个时间范围内被执行的话,资料就要遗失」的情况。
这个等级一定得在正确评估之下使用之,如果你把这样的等级指定给一般的
(并不会常常被阻塞的)执行线程,多任务环境恐怕会瘫痪,因为这个执行线程有如
此高的优先权,其它执行线程再没有机会被执行。
IDLE NORMAL
上述四种等级,每一个等级?
小说推荐
- Java编程思想第4版[中文版](PDF格式)
- -Page 1-Page 2《Thinking In Java》中文版作者:Bruce Eckel主页:http/BruceEckel.编译:Trans Bot主页:http/memberease~transbot致谢-献给那些直到现在仍在孜孜不倦创造下一代计算机语言的人们!指导您利用万维网的语言进
- 其他
- 最新章:第295章
- VB2008从入门到精通(PDF格式英文版)
- -Page 1(R)The eXperT’s Voice inBeginningVB 2008From Novice to ProfessionalChristian Gross-Page 2-Page 3-Beginning VB 2008From Novice to Professional■C
- 其他
- 最新章:第214章
- oracle从入门到精通(PDF格式)
- -Page 1-Oracle 从入门到精通-Page 2-资源来自网络,仅供学习 Oracle 从入门到精通一、SQL 8
- 其他
- 最新章:第37章
- C语言游戏编程从入门到精通(PDF格式)
- -Page 1-Page 2-Page 3-Page 4-Page 5-Page 6-Page 7-Page 8-Page 9-Page 10-Page 11-Page 12-Page 13-Page 14
- 其他
- 最新章:第4章
- 深入浅出
- 《深入浅出》作者:白小骨晋江VIP20140610完结+1番外非V章节总点击数:67370 总书评数:209 当前被收藏数:764 文章积分:11,386,657文案:每个前男友都是女人掉过的坑,从何典阳这个坑里往外爬的梁温暖一脸血表示,何典阳他这个深坑实在太坑爹。何典阳:我是坑?梁温暖…别看我,我
- 激情
- 最新章:第74章
- 深入浅出[娱乐圈]
- 文案【忠犬影帝攻X傲娇明星受,1V1轻松甜文,前期互相试探,38章在一起后甜甜甜,两人都有细微的变化和成长~这也是我用心构思攻受感情发展的文,但数据有点太惨了,没入V可以全文免费看,还是想求点收藏呀,数据好看点吧,让我开心一下(笑哭.jpg)流量偶像白漾和影帝顾瑜祁关系很僵,传言两人出道时不合而互相
- 激情
- 最新章:第59章
- JMS简明教程(PDF格式)
- -Page 1-JMS1.1规范中文版卫建军2007‐11‐22-Page 2
- 其他
- 最新章:第28章
- SQL语言艺术(PDF格式)
- -Page 1-SQLSSQQLL语言艺术内容介绍本书分为12章,每一章包含许多原则或准则,并通过举例的方式对原则进行解释说明。这些例子大多来自于实际案例,对九种SQL经典查询场景以及其性能影响讨论,非常便于实践,为你数据库应用维护人员阅读。资深 SQL 专家 Stéphane Faroult倾力打
- 其他
- 最新章:第27章
- C语言实例教程(PDF格式)
- -Page 1-前 言Visual C+是开发运行于Windows 95和Windows NT环境下的Win32应用程序的可视化编程工具中最重要的成员之一,它为软件开发人员提供了完整的编辑、编译和调试工具和建立于Win32 API(ApplicationProgramming Interface)基
- 其他
- 最新章:第143章