| 
 這樣做都能實(shí)現(xiàn)效果,但是之所以不能這樣做,是因?yàn)橛锌赡墚a(chǎn)生問題,雖然出現(xiàn)問題的概率很低很低,但仍然無法保證百分百不出問題,自己寫一些小程序的話當(dāng)然沒有關(guān)系,但如果寫一些正式的商業(yè)軟件,特別是需要7X24小時(shí)穩(wěn)定運(yùn)行的軟件,都不會(huì)這樣做。其實(shí)這是一個(gè)多線程編程的問題,并不只是在MFC中需要注意,在所有多線程并發(fā)編程中都應(yīng)該注意,當(dāng)你直接把CWND指針傳遞到工作者線程中以后,現(xiàn)在就有兩個(gè)線程(UI線程和工作者線程)都可以同時(shí)調(diào)用這個(gè)CWND指針的方法,而MFC不像STL那樣,MFC的對(duì)象不是線程安全的,訪問的時(shí)候都沒有加鎖,程序運(yùn)行起來后,可能出現(xiàn)這樣一個(gè)狀況,即某個(gè)時(shí)刻,兩個(gè)線程同時(shí)調(diào)用了同一個(gè)CWND對(duì)象的方法,就會(huì)帶來一些不可預(yù)料的多線程競(jìng)態(tài)問題,從而出現(xiàn)一些不可預(yù)料的錯(cuò)誤。你要這樣想,我們?cè)诙嗑€程編程中,多個(gè)線程需要訪問同一個(gè)變量的時(shí)候,是不是應(yīng)該加鎖訪問,那么UI線程和工作者線程在訪問同一個(gè)CWND對(duì)象時(shí),也應(yīng)該如此,如果沒有加鎖,豈不是就容易出現(xiàn)問題。
 這一點(diǎn)在《MFC windows程序設(shè)計(jì)》和MSDN文檔上都說過了,雖然出錯(cuò)概率很低,但我們也應(yīng)該規(guī)范編程。
 |