Win32核心编程 读书笔记二 进程线程的注意事项


终止进程的运行

1主线程的进入点函数返回(最好使用这个方法)。 

2进程中的一个线程调用E x i t P r o c e s s函数(应该避免使用这种方法)。 

注:这种显示的调用,会导致资源无法释放。举例说明如果在对象析构之前就调用E x i t P r o c e s s,那么对象就无法正常的释放所占用的资源,从而导致内存泄露。

3另一个进程中的线程调用Te r m i n a t e P r o c e s s函数(应该避免使用这种方法)。 

注:Te r m i n a t e P r o c e s s函数是个异步运行的函数,也就是说,它会告诉系统,你想要进程终止运行,但是当函数返回时,你无法保证该进程已经终止运行。因此,如果想要确切地了解进程是否已经终止运行,必须调用Wa i t F o r S i n g l e O b j e c t函数或者类似的函数,并传递进程的句柄。

4进程中的所有线程自行终止运行(这种情况几乎从未发生)。 



 终止线程的运行

若要终止线程的运行,可以使用下面的方法:

1 线程函数返回(最好使用这种方法)。

2通过调用E x i t T h r e a d函数,线程将自行撤消(最好不要使用这种方法)。

 注:该函数将终止线程的运行,并导致操作系统清除该线程使用的所有操作系统资源。但是,C + +资源(如C + +类对象)将不被撤消。

3 同一个进程或另一个进程中的线程调用Te r m i n a t e T h r e a d函数(应该避免使用这种方法)。

 注:Te r m i n a t e T h r e a d能够撤消任何线程。但是它是一个异步函数,不能保证线程能够及时的撤销

• 包含线程的进程终止运行(应该避免使用这种方法)。




转换到另一个线程

BOOL SwitchToThread();

如果没有线程迫切需要C P U时间,S w i t c h To T h r e a d就会立即返回。如果存在一个迫切需要C P U时间的线程,S w i t c h To T h r e a d就对该线程进行调度

注:这个函数的功能不受线程的优先级影响,这是它与sleep的区别





其他注意事项

1还需要注意的是,要区分window API和C/C++函数,C r e a t e T h r e a d与_ b e g i n t h r e a d e x,E x i t T h r e a d与_ e n d t h r e a d e x等等。

2线程可以自行暂停运行,但是不能自行恢复运行,线程是不可以自己调用 DWORD ResumeThread(HANDLE hThread)来恢复自己运行的。

3在实际环境中,调用S u s p e n d T h r e a d时必须小心,因为不知道暂停线程运行时它在进行什么操作。如果线程试图从堆栈中分配内存,那么该线程将在该堆栈上设置一个锁。

4进程是根本不能调度的,只有线程才能被调度。

5对于Windows 2000来说,系统可以为前台进程的线程提供比通常多的C P U时间量。这种调整只能在前台进程属于正常优先级类的进程时才能进行。如果它属于其他任何优先级类,就无法进行任何调整。

 注:所以有时候我们不用刻意的去改变前台程序的进程优先类,那样有时候效果反而适得其反




谢谢你的阅读!!











评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值