日韩av黄I国产麻豆传媒I国产91av视频在线观看I日韩一区二区三区在线看I美女国产在线I麻豆视频国产在线观看I成人黄色短片

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 >

VCL线程不安全

發布時間:2023/12/19 32 豆豆
生活随笔 收集整理的這篇文章主要介紹了 VCL线程不安全 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
當您使用的類層次結構的對象如TThread,其屬性和方法都不能保證是線程安全的。也就是說,直接訪問其他窗體屬性或執行方法,則使用的內存不從受其他線程的保護。正因為如此,一個主線程是預留訪問VCL和CLX對象,從而使所有的Windows組件接收到線程發送的消息時進行處理,即讓應用程序上的所有控件同步使用消息循環,而實現該線程同步則需要使用到Synchronize。VCL實現同步方法就是調用線程類的Synchronize的過程,此過程需要一個無參數的procedure,故在此procedure中無法傳遞參數值,但可以通過類的成員來實現。在類的Execute中只須調用Synchronize就可以了。如果在線程中對VCL操作,在連續執行多次以后,會報錯誤或者莫名其妙的顯示錯誤問題,如字體大小變化、字體變粗、消失等,這個問題可以由上述方法修復,把賦值操作讓窗體主線程來完成。關鍵在于對Synchronize參數的定義。定義一個無參數的procedure通過它來訪問其他類的成員。在類的重載Execute中調用Synchronize。 procedure TMyThread.PushTheButton; beginButton1.Caption := '測試';Button1.Click; end; procedure TMyThread.Execute; begin...Synchronize(PushTheButton);... end;使用Synchronize將保證你對Button1控件的操作是線程安全的,但如果不使用Synchronize而直接在線程的Execute方法中執行因為執行不是線程安全的則會出現各種問題,如果不執行Button1的click事件,或者Button1的caption顯示字體忽大忽小等。在應用程序中并不是所有的類需要使用主線程,因此當你知道一個對象的方法是線程安全的則可以省略使用Synchronize方法,這樣將提高性能,因為不需要等待VCL或CLX線程進入消息循環:1)控件不是線程安全的,因此在對象中操作控件需要使用Synchronize方法來進行同步顯示;2)圖形對象是線程安全的,您不需要使用主VCL或CLX的線程訪問TFont,TPEN,TBrush,TBitmap,TMetafile(VCL),TDrawing(CLX),或TICON,Canvas對象可以用來鎖定外同步方法;3)列表對象不是線程安全的,你可以使用一個線程安全的版本,TThreadList,而不是TLIST。

?

轉載于:https://www.cnblogs.com/moonwind/p/4495798.html

總結

以上是生活随笔為你收集整理的VCL线程不安全的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。