作者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/cn.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