六 (6.7)C/C++运行库注意事项 6.8 了解自己的身份
2014-09-02 19:30
330 查看
保证线程安全是程序员的职责。创建新线程是一定不能调用Windows的的CreateThread函数,而应该用C/C++运行库的_beginthreadex函数(参数列表一样,但参数名和类型不完全一致)。C/C++运行库还围绕特定的函数设置了同步对象,例如:如果两个线程同时调用malloc函数,堆就会破坏。C/C++运行库函数不允许两个线程同时从内存中分配空间。
6.8 了解自己的身份
线程执行时通常希望调用能够改变执行环境的windows函数,例如一个线程希望更改它或者其进程的优先级。
HANDLE GetCurentProcess();//获取当前进程内核对象的伪句柄
HANDLE GetCurrentThread();//获取当前线程内核对象的伪句柄
注: 返回伪句柄不会影响引用计数,CloseHandle也不会真的减少引用计数。
调用一个windows函数时,如果需要一个进程或线程句柄作为参数时,可以传递一个伪句柄,这将导致函数在主调进程或主调线程上执行该函数的操作(注意:线程的伪句柄是一个指向当前线程的句柄!!)。 如果需要在原伪句柄的线程或进程上执行操作,需要把伪句柄转换为真正句柄。
把伪句柄转换为真正句柄:
即转换为一个能明确无歧义的表示一个线程的句柄。 函数:DuplicateHandle();//把伪句柄转换为一个真正的句柄(这将影响引用计数,不需要时记得调用CloseHandle())。
6.8 了解自己的身份
线程执行时通常希望调用能够改变执行环境的windows函数,例如一个线程希望更改它或者其进程的优先级。
HANDLE GetCurentProcess();//获取当前进程内核对象的伪句柄
HANDLE GetCurrentThread();//获取当前线程内核对象的伪句柄
注: 返回伪句柄不会影响引用计数,CloseHandle也不会真的减少引用计数。
调用一个windows函数时,如果需要一个进程或线程句柄作为参数时,可以传递一个伪句柄,这将导致函数在主调进程或主调线程上执行该函数的操作(注意:线程的伪句柄是一个指向当前线程的句柄!!)。 如果需要在原伪句柄的线程或进程上执行操作,需要把伪句柄转换为真正句柄。
把伪句柄转换为真正句柄:
即转换为一个能明确无歧义的表示一个线程的句柄。 函数:DuplicateHandle();//把伪句柄转换为一个真正的句柄(这将影响引用计数,不需要时记得调用CloseHandle())。
相关文章推荐
- 很多朋友想用SQL2000数据库的编程方法,但是却又苦于自己是学ACCESS的,对SQL只是一点点的了解而已,这里我给大家提供以下参考---将ACCESS转化成SQL2000的方法和注意事项(我刚学会的!)
- #签约注意事项#大四签约前必须了解的事,不看对不起自己的前程
- 到西藏工作,出差,旅行,出游,体验,好奇一切的一切,大全科!!绝对是经典“教科书”类,上面见不到的!全面了解,西藏的生活水平,和注意事项,是去西藏,拉萨前的必读性文章。
- 关于c++的一些注意事项
- [转]C++多线程调试和测试的注意事项
- wince下采用快捷方式启动自己的应用程序方法注意事项
- windows mobile开发需要了解及注意的事项
- c++新标准(新的c++标准已经被g++执行,注意更新自己的知识啊!)
- c语言及c++若干注意事项(逐步添加)
- .NET工程中以 C 和 C++ 两种方式编译时,函数调用注意事项
- 配置config.bib的注意事项以及错误分析——自己都要顶!
- C++界面设计注意事项(windows mobile)
- iis设置时候注意事项——自己的经验
- 关于C/C++中 常量应用的注意事项
- [c++ primer plus]c++ compiler缺省生成了哪些构造函数?关于构造函数的注意事项。
- c++ iterator 删除的注意事项
- 关于c++的一些注意事项
- ObjectArx自定义实体入门(C++)及注意事项
- C和C++混合编程注意事项
- c++细节问题,面试注意事项(转)