[問題] 如何使用GDI+ 繪出同示波器的波形效果?

看板C_Sharp (C#)作者 (C.L ~)時間12年前 (2012/10/24 11:01), 編輯推噓0(002)
留言2則, 2人參與, 最新討論串1/1
如題,小弟目前使用過MSCHART ...與 ZedGraph套件 將讀進來的數值進行及時繪圖 ( 訊息的速率為1點/1ms ) 一秒取值一千點~( 最快可到兩千點...) 來源訊號為Sine ... 如果使用取一點標一點速度很明顯跟不上 ( 50ms頂多取一點 ) 所以目前皆使用取滿一個Buffer=1000點的值在一次顯示 但是速度有比較好一點~但是繪圖似乎也跟不上 常會出現取值時間不固定,波形很醜的情況(歪歪的SINE波形 ) 似乎在取值的時間上有落差(並不是每1ms就去取一個點...會因為其他UI的事件造成delay) 取值的方法我是使用Backgroundworker private void BG_Worker2_DoWork(object sender, DoWorkEventArgs e) { for (; ; ) { if (BG_Worker2.CancellationPending) { e.Cancel = true; break; } else { //取點 .... IR_Buf 為存取點數 , DrawPointCt=設定點數,取多少點更新一次圖,點為浮點值 IR_Buf[DrawPontCt, 0] = Demo_RData[0]; IR_Buf[DrawPontCt, 1] = Demo_RData[1]; IR_Buf[DrawPontCt, 2] = Demo_RData[2]; IR_Buf[DrawPontCt, 3] = Demo_RData[3]; ..... ..... ..... if (DrawPontCt == PointCt - 1) //點數取滿後 { DrawPontCt = 0; if (Draw_already) { Draw_Buf_Ok = true; if (BG_Woker1.IsBusy) { } else { BG_Woker1.RunWorkerAsync(); } } } else { // DrawPontCt++; Draw_Buf_Ok = false; } //若在此使用 sleep (1ms) ....效能會剩下100點/1秒 //Application.DoEvents(); //Thread.Sleep(1); //所以要固定時間取值要使用for迴圈來做延遲嗎 for (int i = 0; i < Delay; i++) // { } } } } 請問再取值的方式上是否要做什麼改正? 如果要精確做到( 一點 / 1ms 取值如何實現? ) -- ※ 發信站: 批踢踢實業坊(ptt.cc) ◆ From: 111.252.94.126

10/24 12:52, , 1F
PC是多工系統,要特殊功能,像是錄音,才能保證取樣時間吧
10/24 12:52, 1F

10/24 19:50, , 2F
或許你要DROP掉一些
10/24 19:50, 2F
文章代碼(AID): #1GXrdun- (C_Sharp)
文章代碼(AID): #1GXrdun- (C_Sharp)