看板 C_and_CPP 關於我們 聯絡資訊
開發平台(Platform): (Ex: Win10, Linux, ...) C++ Builder 2010 問題(Question): 小弟用 BCB 開發程式來抓取 有RS485介面的設備資料 但後來發現同一個程式的單執行緒時間,在我的NB (開發程式的電腦) 跟資料擷取用的電腦,兩者記算出來的時間不同 程式碼(Code):(請善用置底文網頁, 記得排版) __fastcall SysRun::SysRun(bool CreateSuspended) : TThread(CreateSuspended) { FreeOnTerminate = true; } //--------------------------------------------------------------------------- void __fastcall SysRun::Execute() { //---- Place thread code here ---- Time_Interval = 50; RS485State = RS485Polling; while(!Terminated){ //R485 狀態機 if (RS485State == RS485Polling) Form3_Polling(); //線程每一次 Cycle 停置 0.01s Sleep(10); TimerCount++; } } //--------------------------------------------------------------------------- void SysRun::Form3_Polling(void) { if (TimerCount % Time_Interval == 0) { Form2->P1->Caption = "Time " + IntToStr((int)GetTickCount() - Form2->changetime) + " ms"; Form2->changetime = GetTickCount(); } if (TimerCount >= 50) {TimerCount = 0;} } 補充說明(Supplement): 用我的 NB 跑計算出來的時間都可以 Time 500 ms 但如果用設備的電腦跑出來的時間都會變成 Time 780 ms 開發程式用NB的硬體系統資訊 http://imgur.com/a/QEpnj 設備電腦的硬體系統資訊 http://imgur.com/a/IWj1r 有點傻眼怎麼會這樣 = =||| 要怎麼樣做才可以設備電腦的計算出來的執行緒時間變正常呢? 感謝回答...~L -- ※ 發信站: 批踢踢實業坊(ptt.cc), 來自: 123.51.145.16 ※ 文章網址: https://www.ptt.cc/bbs/C_and_CPP/M.1503399498.A.C07.html
chuegou: 這是compile的問題吧? 08/22 19:01
laertes: = =痾 這個我不太懂,要怎麼處理 08/22 19:02
laertes: 更新新版一點的BCB試試?? 08/22 19:03
Schottky: 用 Sleep() 和 GetTickCount() 計時是否搞錯了什麼 08/22 19:23
Schottky: 然後你的 Form3_Polling() 所耗的時間也會造成誤差 08/22 19:24
Schottky: 每次要推自己的文章都有點害羞 #1IGT3gmB (C_and_CPP) 08/22 19:24
Schottky: 這兩個 function 的計時精度是 1 / 18.2Hz = 54.945ms 08/22 20:22
laertes: S大我知道你想表達的誤差 08/22 22:00
laertes: 但我目前遇到的這個問題應該不單單只是誤差造成的 08/22 22:01
Lipraxde: 你看看執行檔內容→一般→安全性那邊有沒有個解除封鎖的 08/22 23:22
Lipraxde: 選項,說什麼檔案來自另一部電腦之類的 08/22 23:22
F04E: 有可能是OS版本的影響,64位元版效能平均比32位元版高13% 08/29 15:28