TThreadList 與多執行緒 |
|
CoffeeX
中階會員 發表:18 回覆:121 積分:72 註冊:2005-02-18 發送簡訊給我 |
首先我想請問關於 TThreadLsit 的觀念,
也就是它的 "意義" 與 "使用時機和技巧", 因為看了 help 檔還是不太確定, 其次我先解釋一下我目前的作法, 請高手幫忙看一下這樣的概念是否有瑕疵, 首先我有兩個 Thread 會在一塊共用記憶體中處理影像, 最後個別顯示在 Form 上的 Image, 作法是將 Graphics::TBitmap 宣告為全域 (此指如同 TForm1 *Form1 的宣告方式) 其次宣告一 TCriticalSection 為全域 (同上), Thread 處理時進入臨界區, 處理後離開, 使用 Synchronize() 顯示到 Form 的 Image, 即 Form1->Image1->Picture->Bitmap->Asign( MyBmp ); 是否有方法可拿掉 Synchronize() ;
------
=.=??? |
CoffeeX
中階會員 發表:18 回覆:121 積分:72 註冊:2005-02-18 發送簡訊給我 |
自解:
有資料指出 TThreadList = TList TCriticalSection 所以我的作法將 TImage 與 TBitmap 加入此 TThreadList ; 然後在 Thread 中使用前先 Lock , 用完後解 Lock,如: List = ThdList->LockList(); Byte *ptr; for (int i = 0; i < 400; i ) { ptr = (Byte *)((Graphics::TBitmap*)List->Items[1])->ScanLine[i]; for (int j = 0; j < 400; j ) { ptr[3*j] = 0; ptr[3*j 1] = 255; ptr[3*j 2] = 0; } } ((TImage*)List->Items[0])->Picture->Bitmap->Assign((Graphics::TBitmap *)List->Items[1]); ThdList->UnlockList(); 其中 ThdList 為此 TThreadList, List->Items[0] 為 TImage, List->Items[1] 為 TBitmap, 不知是否有更好的作法?
------
=.=??? |
本站聲明 |
1. 本論壇為無營利行為之開放平台,所有文章都是由網友自行張貼,如牽涉到法律糾紛一切與本站無關。 2. 假如網友發表之內容涉及侵權,而損及您的利益,請立即通知版主刪除。 3. 請勿批評中華民國元首及政府或批評各政黨,是藍是綠本站無權干涉,但這裡不是政治性論壇! |