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