兩個執行緒,每個執行緒的功能是分別在主界面畫圖
HDC hdc1 = GetDC()->m_hDC;
GraphSin = ::new Graphics(hdc1);
GraphAdvice = ::new Graphics(hdc1);
thread1{
DisplaySinCurve(GraphSin);
}
thread2{
DisplayAdvice(GraphSin);
}
DisplaySinCurve(Graphics* WorkGraphics){
Bitmap* CompatibleBitmap = ::new Bitmap(500, 250);
Graphics* CompatibleGraphic = ::new Graphics(CompatibleBitmap);
// 畫圖操作
// 雙緩沖把圖貼到主界面
WorkGraphics->DrawImage(CompatibleBitmap, m_destStatic_Advice,
0, 0, CompatibleBitmap->GetWidth(), CompatibleBitmap->GetHeight(), UnitPixel);
}
DisplayAdvice(Graphics* WorkGraphics){
Bitmap* CompatibleBitmap = ::new Bitmap(500, 250);
Graphics* CompatibleGraphic = ::new Graphics(CompatibleBitmap);
// 畫圖操作
// 雙緩沖把圖貼到主界面
WorkGraphics->DrawImage(CompatibleBitmap, m_destStaticRect_Sin, 0, 0, CompatibleBitmap->GetWidth(), CompatibleBitmap->GetHeight(), UnitPixel);
}
問題是運行其中一個執行緒畫圖沒有任何問題,兩個都運行后,出現了前面畫上去的東西刷不掉的問題(有重影),請大牛解決。

uj5u.com熱心網友回復:
本來應該是四條曲線不斷的平移,只要開了另一個畫圖執行緒,曲線就會出現8條甚至更多。uj5u.com熱心網友回復:
建議只在一個執行緒中繪制, 容易控制onDraw()
{
if(fb) { } //填充背景
if(f1) { draw1(); }
if(f2) { draw2(); }
if(fn) { drawn(); }
}
uj5u.com熱心網友回復:
單執行緒也可以,我比較想知道這樣為什么會出錯。。單執行緒如果幾個畫圖函式一起執行速度會變慢吧
uj5u.com熱心網友回復:
單執行緒也可以,我比較想知道這樣為什么會出錯。。單執行緒如果幾個畫圖函式一起執行速度會變慢吧
uj5u.com熱心網友回復:
Multiple Threads in the User Interface http://msdn.microsoft.com/zh-cn/library/ms810439.aspxuj5u.com熱心網友回復:
自己頂一下,沒有大神能回復么?uj5u.com熱心網友回復:
個人感覺兩個執行緒應該共同操作同一快取(Bitmap* CompatibleBitmap),而不是兩個塊快取。重影原因有可能是當兩塊快取同時向前臺同一設備分別執行DrawImage()
以上僅是猜測,底層是不是這樣執行的就不得而知了
uj5u.com熱心網友回復:
你每個執行緒繪制的東西會重在一起, 那肯定就會出現這樣的情況了.正確的做法, 是把耗時間的繪制放到執行緒中,并繪制到緩沖區中, 再由UI執行緒把它們全部繪制到界面上.
而不是每個執行緒都在直接操作設備DC來繪制.
uj5u.com熱心網友回復:
up
uj5u.com熱心網友回復:
5樓大神已經回復過了。
uj5u.com熱心網友回復:
調皮的趙四老師
轉載請註明出處,本文鏈接:https://www.uj5u.com/gongcheng/124006.html
標籤:界面
