首页 > 编程语言 > 详细

《Win32多线程程序设计》读书笔记(三)

时间:2020-04-13 14:54:57      阅读:62      评论:0      收藏:0      [点我收藏+]

第三章

忙等 Busy Waiting

忙等,在这里就是不断调用GetExitCodeThread函数,直到结果不再是STILL_ACTIVE,它十分浪费CPU时间。

举个最简单的例子:

...
GetExitCodeThread(hThrd, &exitCode)
while(STILL_ACTIVE == exitCode);
...

这就是忙等。

处于忙等会让主线程一直处于这个while循环中去判断exitCode的值是否等于STILL_ACTIVE,这实在是太浪费时间了!不仅如此,你可能由于这一个程序,导致其他进程资源被抢占,也就是其他应用卡顿,这简直是灾难!

所以千万不要用忙等。

性能监视器 (Performace Monitor)

在现在的Windows10系统中依旧有原来老NT老95的性能监视器的功能的系统应用。

也就是现在的任务管理器(Task Manager),里面可以监视各个进程占用资源情况,性能情况等。

等待一个线程的结束

Win32提供了一个名为WaitForSingleObject的函数,能够在某个线程结束时被调用。

DWORD WaitForSingleObject(
	HANDLE hHandle,
    DWORD dwMilliseconds
);

dwMilliseconds指等待的最长时间,如果到了最长时间,handle尚未成为激发状态,则还是要返回。指定0,表示立即返回;指定INFINITE表示无穷等待。

如果函数失败,返回WAIT_FAILED,可以用GetLastError获取错误信息。

函数成功时,如果等待的目标核心对象变成激发状态,返回WAIT_OBJECT_0

如果等待的核心对象变成激发态之前,等待时间过了,则返回WAIT_TIMEOUT;

如果一个拥有mutex(互斥器)的线程结束前没有释放mutex,则传回WAIT_ABANDONED

通过这个函数,改良之前的代码:

WaitForSingleObject( hThrd, INFINITE);

休息一下

《Win32多线程程序设计》读书笔记(三)

原文:https://www.cnblogs.com/lazy-v/p/12691052.html

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!