[問題] 更新GUI用event還是polling比較好?

看板C_Sharp作者 (s4300026)時間5年前 (2019/01/24 16:42), 5年前編輯推噓4(4011)
留言15則, 2人參與, 5年前最新討論串1/1
我寫了一個呼叫某個dll的二次包裝class 然後裡面包了一個 BackgroundWorker 去 polling 別人的參數 然後記錄在這個二次包裝的class裡面 現在我想要把這些狀態顯示在gui上面 那現在方法有至少兩種 第一種是我在 form 上面再開一個 BackgroundWorker 去 polling 二次包裝的class 第二種是我在二次包裝的class上開放一個event hooker,然後在 DoWork 尾端 raise event 大家會建議用哪一種呢? 有明顯的差異性嗎? -- ※ 發信站: 批踢踢實業坊(ptt.cc), 來自: 60.250.235.221 ※ 文章網址: https://www.ptt.cc/bbs/C_Sharp/M.1548319368.A.7BF.html ※ 編輯: s4300026 (114.137.72.20), 01/24/2019 18:18:07

01/25 08:23, 5年前 , 1F
我會選 event,單純是不想要再開1個 thread 去做同樣的事;
01/25 08:23, 1F

01/25 08:23, 5年前 , 2F
說到效能,你做的東西對效能的定義是什麼?一秒幾千筆/幾
01/25 08:23, 2F

01/25 08:23, 5年前 , 3F
百 mb 的資料?
01/25 08:23, 3F
是沒有那麼誇張,但是也不算非常少了, 兩張卡控制14個馬達,兩張DIO,兩個相機(20FPS * 5MB *2 ) 如果要全部監控到GUI,就是14+2+2個thread在做狀態 polling 如果GUI不採用event,thread數量就 *2 (感覺我已經自問自答了?) 算一下好像還真的有破100MB ~.~" 但只是全部都是相機惹的禍... 目標就是不要掉FPS,然後GUI不要LAG ※ 編輯: s4300026 (60.250.235.221), 01/25/2019 09:32:39

01/26 10:46, 5年前 , 4F
我覺得你要先從架構上來看
01/26 10:46, 4F

01/26 10:46, 5年前 , 5F
1. 監控的目的 (Teaching?/手動製程?),這點決定你更新的
01/26 10:46, 5F

01/26 10:46, 5年前 , 6F
頻率
01/26 10:46, 6F

01/26 10:46, 5年前 , 7F
2. 每個資料流擷取一筆的速度 (Motion/DIO/Camera),這個
01/26 10:46, 7F

01/26 10:46, 5年前 , 8F
決定你更新的間隔
01/26 10:46, 8F

01/26 10:46, 5年前 , 9F
你有了基本資料,你才能推導出你現在的pc"理論上"能做到什
01/26 10:46, 9F

01/26 10:46, 5年前 , 10F
麼程度,接下來才有頭緒解更新的問題
01/26 10:46, 10F

01/26 10:53, 5年前 , 11F
以你的資料來看,用一條 Thread 做更新就夠了,更新的瓶頸
01/26 10:53, 11F

01/26 10:53, 5年前 , 12F
會是在相機
01/26 10:53, 12F
你說的沒有錯,正常來說只要一個thread就夠了 說實話,GUI更新超級快,一點意義也沒有,人們也不在乎,也反應不過來 目前的問題在於 抓取 的行為要怎麼樣只寫一次就夠了? 我一個GUI,配一個馬達 thread 開一個,然後進行一對一更新 但如果我今天有 14 個馬達,就算我只更新當前顯示的 GUI 那我也要撰寫 event 或 polling 的方法 那我的 event 或 polling 方法要寫 14次嗎? 如果不想寫 14 次 那就包裝成class 那就會遇到 hook 14 次比較好,還是多產生 14 個 polling thread 比較好? ※ 編輯: s4300026 (60.250.235.221), 03/09/2019 17:07:24

03/10 23:05, 5年前 , 13F
看你是取資料慢還是更新GUI慢,取資料慢就用event,資
03/10 23:05, 13F

03/10 23:05, 5年前 , 14F
料都還沒更新你Polling也沒用,若是更新GUI慢就用pollin
03/10 23:05, 14F

03/10 23:05, 5年前 , 15F
g,不然你取樣速度會被更新GUI卡住
03/10 23:05, 15F
文章代碼(AID): #1SINg8U_ (C_Sharp)