笔记:线程与GDI的冲突:死机的真正原因

来源:互联网 发布:简述大数据思维 编辑:程序博客网 时间:2024/04/27 22:57
很多人使用线程的时候,都喜欢在线程内画图。如果在线程内画图,程序就很容易出错,而
且还是那种没有任何响应和提示的错误问题.
例如,一个复制文件的程序,这个程序由两个线程组成,一个是复制文件的线程,一个
是显示文件复制进度的线程。理论上这个程序没有什么问题。但是,这个程序有一个很大的
隐患,就是主程序也可能某一时刻要更新这个进度条,例如,进度窗口被其他窗口挡住后或
窗体,这个窗体就要刷新,这时,如果线程的那个部分也要刷新,操作系统也要刷新。这样,
三个部分都要刷新他,程序就很容易死锁(《操作系统》对死锁有明确定义)。。。。。。
有一条原则,即程序中的线程一概不直接操作现成部分中的GDI。他只要发个消息给主程序
,让主程序来绘制图形,就不会出现任何的问题。。。。。
发消息的方法就是用PostMessage的函数,但一定不能用SendMessage,因为用PostMessage
可以让主程序调度去绘图,而SendMessage会立即去绘图。。。。。
原创粉丝点击