為什么 BeginThread 創建的執行緒中的畫圖代碼(MovetoEx,LineTo)沒有效果? 代碼移除執行緒呼叫就沒問題。
uj5u.com熱心網友回復:
畫圖代碼如果是用 Canvas,那么需要資源保護。我不記得是 TCanvas.BeginUpdate & EndUpdate, 還是 Lock,UnLock 了。
我建議你先貼一下自己的代碼。
uj5u.com熱心網友回復:
是Canvase.大致代碼如下:
void StartGifPlay(HDC Hdc, WORD x, WORD y, TMemoryStream* str , bool bStream) //播放GIF影片
{
Cs.Hdc = Hdc; //// Hdc為form上的一個 frmShow->img->Canvas->Handle ;
BeginThread(0,0, (TThreadFunc )ShowImg,( LPVOID )(&Cs),0,0); //開啟新行程以播放GIF
}
long __fastcall ShowImg(LPVOID pParam)
{
Cs * pcs = (Cs *)pParam;
HDC dc = pcs ->Hdc ;
MovetoEx(dc,0,0,0);
Lineto(dc,100,100); <<===這兩句繪圖代碼無效,界面上看不到效果
return 0;
}
=========
如果把畫圖代碼放在執行緒外就沒問題。
uj5u.com熱心網友回復:
主執行緒負責畫圖啊,子執行緒處理資料就行了轉載請註明出處,本文鏈接:https://www.uj5u.com/houduan/98917.html
標籤:語言基礎/算法/系統設計
