在采集程序中,定时器函数和WindowProc函数存在的一些问题

在采集函数中,WindowProc函数负责处理下位机传输上来的数据(ThreadExecute_Read函数在读取数据后发送MSG_READ_COMPLETION消息,WindowProc函数接收到此消息后表示可以处理已经收到的数据了),定时器函数负责显示数据。

这里涉及了一个多线程ThreadExecute_Read,一个高精度定时器mycallback,一个普通定时器OnTimer。多线程ThreadExecute_Read在类CBioUSBAPI的构造函数中被启动,负责接收下位机的数据,高精度定时器mycallback通过按钮启动,负责激发采集信号状态,它与多线程函数ThreadExecute_Read互相配合共同实现了上位机和下位机的通讯。普通定时器则负责采集数据的显示。

程序的逻辑是在普通定时器中设置某些变量的状态位(如true或者false),在WindowProc函数中去判断其状态。普通定时器的间隔时间大概是50毫秒,高精度定时器的采样频率大概是10毫秒(mr = ::timeSetEvent (10,0,mycallback,(DWORD)this,TIME_PERIODIC);),在程序的某些关键位置加入TRACE调试,输出结果如下:

 

...........

...........

4

第二航道1

3

4

3

4

第二航道2

第三航道1

3

4

3

4

第三航道2

第四航道1

3

4

3

4

第四航道2

第五航道1

3

4

3

4

第五航道2

3

4

3

4

3

3

 

 4

第六航道1

3

4

3

4

m_nRank=6

德国队

第六航道2

...........

...........

 

 3代表WindowProc开始时位置,

4代表WindowProc结束时位置。

 

从TRACE输出来看,在普通定时器OnTimer代码的执行过程中,被WindowProc函数多次打断。即在定时器代码的执行过程中可以被WindowProc函数中断,反之WindowProc函数执行的过程中不能被定时器去中断。原因是高精度定时器的优先级别要高于普通定时器,且它的时间间隔要更短。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值