很简单,像WaitForSingleObject这种函数都会占用进程的
绝大部分CPU,使得你的工作线程阻塞,而无法退出,而你的主线程
又一直等待最后造成死锁。
而GetExitCodeThread的循环调用也是CPU密集型处理,跟上面原理一样。
最后一种方法则是通过循环消息调用的方式,在消息队列处理时中间存在着很多
IDLE时间,供工作线程继续工作,所以能成功,实际上你把上述代码放在定时器
中,也能成功。
解决方法是将工作线程的优先级设定为跟主线程一样高(缺省是要低),这样既便
主线程阻塞,工作线程也能获得CPU时间。
绝大部分CPU,使得你的工作线程阻塞,而无法退出,而你的主线程
又一直等待最后造成死锁。
而GetExitCodeThread的循环调用也是CPU密集型处理,跟上面原理一样。
最后一种方法则是通过循环消息调用的方式,在消息队列处理时中间存在着很多
IDLE时间,供工作线程继续工作,所以能成功,实际上你把上述代码放在定时器
中,也能成功。
解决方法是将工作线程的优先级设定为跟主线程一样高(缺省是要低),这样既便
主线程阻塞,工作线程也能获得CPU时间。
解决方案 »
- 请教,如何把在gdi内存设备环境中绘制的图形保存下来供下一次绘制使用
- 对c++网络爬虫有涉猎的朋友请进
- 如何 把图片中的文字提取出来.
- VC小错误 请高手看看
- 怎样使自己的程序从开始运行到结束都尽可能的独占cpu啊?!
- 判断一个控件在对话框中的坐标问题
- 一个接口带有两个返回值,在ASP里调用,是否能通过
- 我下载了PSDK2002,我需要装些什么才能运行《Windows核心编程》中的例子,装完了再怎么做?
- 使用Microsoft forms2.0 Label控件怎样在干净的操作系统上注册?
- 《程序员大本营2000》D版面市,大家怎么看
- 语音实时录音后如果将它生成文件?
- 向各位高人请教!!!!如何动态加载图标!???
Closing a thread handle does not terminate the associated thread. To remove a thread object, you must terminate the thread, then close all handles to the thread.
我在这里尝试翻译一下:
关闭一个线程的句柄并不是结束了那个相关的线程。若要清除一个线程对象,你必需先结束了这个线程,然后关闭所有与那个线程相关联的句柄(一个线程可以有多个句柄与之相关联)。
也就是说,要想切底从系统里移走一个线程对象,必需符合以下两个条件:
1。结束了那个线程,这里的结束指的是TERMINATE(可能译作中止会好一点)。
2。所有与那个线程相关的句柄都为NULL。
好了,言归正传,在你的例1与例2中,你只是CLOSE了线程的一个HANDLE,并没有TERMINATE它,所以会造成你所说的“死锁”了。请访问我的主页:
http://cloudshadow.go.163.com
是一个介绍VC编程的主页,欢迎大家留言板留言,我会在那回等侍大家光临!
Closing a thread handle does not terminate the associated thread. To remove a thread object, you must terminate the thread, then close all handles to the thread.
我在这里尝试翻译一下:
关闭一个线程的句柄并不是结束了那个相关的线程。若要清除一个线程对象,你必需先结束了这个线程,然后关闭所有与那个线程相关联的句柄(一个线程可以有多个句柄与之相关联)。
也就是说,要想切底从系统里移走一个线程对象,必需符合以下两个条件:
1。结束了那个线程,这里的结束指的是TERMINATE(可能译作中止会好一点)。
2。所有与那个线程相关的句柄都为NULL。
好了,言归正传,在你的例1与例2中,你只是CLOSE了线程的一个HANDLE,并没有TERMINATE它,所以会造成你所说的“死锁”了。请访问我的主页:
http://cloudshadow.go.163.com
是一个介绍VC编程的主页,欢迎大家留言板留言,我会在那回等侍大家光临!