这样做都能实现效果,但是之所以不能这样做,是因为有可能产生问题,虽然出现问题的概率很低很低,但仍然无法保证百分百不出问题,自己写一些小程序的话当然没有关系,但如果写一些正式的商业软件,特别是需要7X24小时稳定运行的软件,都不会这样做。其实这是一个多线程编程的问题,并不只是在MFC中需要注意,在所有多线程并发编程中都应该注意,当你直接把CWND指针传递到工作者线程中以后,现在就有两个线程(UI线程和工作者线程)都可以同时调用这个CWND指针的方法,而MFC不像STL那样,MFC的对象不是线程安全的,访问的时候都没有加锁,程序运行起来后,可能出现这样一个状况,即某个时刻,两个线程同时调用了同一个CWND对象的方法,就会带来一些不可预料的多线程竞态问题,从而出现一些不可预料的错误。你要这样想,我们在多线程编程中,多个线程需要访问同一个变量的时候,是不是应该加锁访问,那么UI线程和工作者线程在访问同一个CWND对象时,也应该如此,如果没有加锁,岂不是就容易出现问题。 这一点在《MFC windows程序设计》和MSDN文档上都说过了,虽然出错概率很低,但我们也应该规范编程。
|