線上訂房服務-台灣趴趴狗聯合訂房中心
發文 回覆 瀏覽次數:3279
推到 Plurk!
推到 Facebook!

TThreadList 與多執行緒

 
CoffeeX
中階會員


發表:18
回覆:121
積分:72
註冊:2005-02-18

發送簡訊給我
#1 引用回覆 回覆 發表時間:2006-11-05 12:22:58 IP:140.125.xxx.xxx 訂閱
首先我想請問關於 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

發送簡訊給我
#2 引用回覆 回覆 發表時間:2006-11-05 14:16:36 IP:140.125.xxx.xxx 訂閱
自解:
有資料指出
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,
不知是否有更好的作法?
------
=.=???
系統時間:2024-11-22 8:59:53
聯絡我們 | Delphi K.Top討論版
本站聲明
1. 本論壇為無營利行為之開放平台,所有文章都是由網友自行張貼,如牽涉到法律糾紛一切與本站無關。
2. 假如網友發表之內容涉及侵權,而損及您的利益,請立即通知版主刪除。
3. 請勿批評中華民國元首及政府或批評各政黨,是藍是綠本站無權干涉,但這裡不是政治性論壇!