多線程中使用 Bmp->canvas->pixel[x][y]的問題 |
答題得分者是:GrandRURU
|
small7011
一般會員 發表:19 回覆:34 積分:10 註冊:2007-07-24 發送簡訊給我 |
首先先說明程式動作:
將一張圖先做2值化後,在尋找圖檔中最左邊與最右邊的第一個白點座標 而我的問題是...... 1.在Form上面引用class中SlopeAngle 函式做尋找動作,無論多少次都沒有問題 2.我將相同程式套用在thread中,當執行到Bmp->canvas->pixel[x][y]會出現=-1,重複測試時好時壞 請各位大大救救我,謝謝!!
------
lee |
aftcast
站務副站長 發表:81 回覆:1485 積分:1763 註冊:2002-11-21 發送簡訊給我 |
沒看你的程式,我快速的猜想… 你可以試一下 TBitmap的lock屬性。在處理前lock,處理後釋放
===================引 用 small7011 文 章=================== 首先先說明程式動作: 將一張圖先做2值化後,在尋找圖檔中最左邊與最右邊的第一個白點座標 而我的問題是...... 1.在Form上面引用class中SlopeAngle 函式做尋找動作,無論多少次都沒有問題 2.我將相同程式套用在thread中,當執行到Bmp->canvas->pixel[x][y]會出現=-1,重複測試時好時壞 請各位大大救救我,謝謝!!
------
蕭沖 --All ideas are worthless unless implemented-- C++ Builder Delphi Taiwan G+ 社群 http://bit.ly/cbtaiwan |
GrandRURU
站務副站長 發表:240 回覆:1680 積分:1874 註冊:2005-06-21 發送簡訊給我 |
VCL元件一直到XE3為止一直都沒有做好Thread Safe這塊
所以要手動自己做「Synchronize」 建議你在 //二值化 pProcess->Threshold(Bmp,50); //角度斜率 pProcess->SlopeAngle(Bmp,&sSlope); 這段先做做看同步處理 應該就可以解決你的問題了 ===================引 用 small7011 文 章=================== 首先先說明程式動作: 將一張圖先做2值化後,在尋找圖檔中最左邊與最右邊的第一個白點座標 而我的問題是...... 1.在Form上面引用class中SlopeAngle 函式做尋找動作,無論多少次都沒有問題 2.我將相同程式套用在thread中,當執行到Bmp->canvas->pixel[x][y]會出現=-1,重複測試時好時壞 請各位大大救救我,謝謝!! |
small7011
一般會員 發表:19 回覆:34 積分:10 註冊:2007-07-24 發送簡訊給我 |
GrandRURU 大,我只要將SlopeAngle 做同步處理之後就可以改善我的目前問題.
另外請教一個問題,我Threshold函式裡面是採用scanline方式,而SlopeAngle函式則採用Canvas->pixel[X][Y]方式 但Bitmap是屬於VCL,理論上我應該都用要需做同步處理才正確是嗎?? ===================引 用 GrandRURU 文 章=================== VCL元件一直到XE3為止一直都沒有做好Thread Safe這塊 所以要手動自己做「Synchronize」 建議你在 //二值化 pProcess->Threshold(Bmp,50); //角度斜率 pProcess->SlopeAngle(Bmp,&sSlope); 這段先做做看同步處理 應該就可以解決你的問題了 ===================引 用 small7011 文 章=================== 首先先說明程式動作: 將一張圖先做2值化後,在尋找圖檔中最左邊與最右邊的第一個白點座標 而我的問題是...... 1.在Form上面引用class中SlopeAngle 函式做尋找動作,無論多少次都沒有問題 2.我將相同程式套用在thread中,當執行到Bmp->canvas->pixel[x][y]會出現=-1,重複測試時好時壞 請各位大大救救我,謝謝!!
------
lee |
GrandRURU
站務副站長 發表:240 回覆:1680 積分:1874 註冊:2005-06-21 發送簡訊給我 |
就像蕭大說的一樣,TBitmap的lock可以避免執行緒重入的問題 (標準且最正確的作法!)
不過對初學者來說Sync會相對簡單(不管它是誰、是要幹嘛,全給我滾回Main Thread去做!) 不論怎樣,VCL用在Thread上就一定要用到同步處理,至於你要用哪一種 就看你的選擇囉 ===================引 用 small7011 文 章=================== GrandRURU 大,我只要將SlopeAngle 做同步處理之後就可以改善我的目前問題. 另外請教一個問題,我Threshold函式裡面是採用scanline方式,而SlopeAngle函式則採用Canvas->pixel[X][Y]方式 但Bitmap是屬於VCL,理論上我應該都用要需做同步處理才正確是嗎?? |
small7011
一般會員 發表:19 回覆:34 積分:10 註冊:2007-07-24 發送簡訊給我 |
GrandRURU大,後來我使用Sync同步處理方式已經獲得解決,而蕭大說的lock方式我還在嘗試 分數我就先給GrandRURU ===================引 用 GrandRURU 文 章=================== 就像蕭大說的一樣,TBitmap的lock可以避免執行緒重入的問題 (標準且最正確的作法!) 不過對初學者來說Sync會相對簡單(不管它是誰、是要幹嘛,全給我滾回Main Thread去做!) 不論怎樣,VCL用在Thread上就一定要用到同步處理,至於你要用哪一種 就看你的選擇囉 ===================引 用 small7011 文 章=================== GrandRURU 大,我只要將SlopeAngle 做同步處理之後就可以改善我的目前問題. 另外請教一個問題,我Threshold函式裡面是採用scanline方式,而SlopeAngle函式則採用Canvas->pixel[X][Y]方式 但Bitmap是屬於VCL,理論上我應該都用要需做同步處理才正確是嗎??
------
lee |
本站聲明 |
1. 本論壇為無營利行為之開放平台,所有文章都是由網友自行張貼,如牽涉到法律糾紛一切與本站無關。 2. 假如網友發表之內容涉及侵權,而損及您的利益,請立即通知版主刪除。 3. 請勿批評中華民國元首及政府或批評各政黨,是藍是綠本站無權干涉,但這裡不是政治性論壇! |