作者laertes (伊薩凱<L>)
看板C_and_CPP
標題[問題] BCB單執行緒2台電腦的寄時不同
時間Tue Aug 22 18:58:15 2017
開發平台(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://webptt.com/m.aspx?n=bbs/C_and_CPP/M.1503399498.A.C07.html
1F:推 chuegou: 這是compile的問題吧? 08/22 19:01
2F:→ laertes: = =痾 這個我不太懂,要怎麼處理 08/22 19:02
3F:→ laertes: 更新新版一點的BCB試試?? 08/22 19:03
4F:→ Schottky: 用 Sleep() 和 GetTickCount() 計時是否搞錯了什麼 08/22 19:23
5F:→ Schottky: 然後你的 Form3_Polling() 所耗的時間也會造成誤差 08/22 19:24
7F:→ Schottky: 這兩個 function 的計時精度是 1 / 18.2Hz = 54.945ms 08/22 20:22
8F:→ laertes: S大我知道你想表達的誤差 08/22 22:00
9F:→ laertes: 但我目前遇到的這個問題應該不單單只是誤差造成的 08/22 22:01
10F:→ Lipraxde: 你看看執行檔內容→一般→安全性那邊有沒有個解除封鎖的 08/22 23:22
11F:→ Lipraxde: 選項,說什麼檔案來自另一部電腦之類的 08/22 23:22
12F:→ F04E: 有可能是OS版本的影響,64位元版效能平均比32位元版高13% 08/29 15:28