1. MFC高精度五段时序控制改进方案解析
在工业控制和自动化测试领域,精确的时序控制是许多应用场景的核心需求。最近我在一个自动化测试项目中,基于之前实现的MFC高精度计时器五段时序控制功能进行了重要改进,增加了条件判断机制,使系统能够根据运行时条件动态调整执行流程。这个改进使得时序控制系统更加灵活和智能,特别适合需要根据外部条件动态调整流程的自动化场景。
需要模型API调用? 免费领10W Token,多模型网关一键接入 Claude、DeepSeek 等主流模型。
2. 系统架构与核心设计
2.1 整体架构设计
改进后的系统采用经典的MFC对话框应用程序架构,主要包含以下几个核心组件:
- 主对话框类(CMultiTimerDlg):负责UI交互和整体流程控制
- 高精度计时器(CElapsed):提供微秒级的时间测量精度
- 独立计时线程:确保时序控制不阻塞主线程
- 条件判断机制:新增的五段独立条件控制系统
cpp复制class CMultiTimerDlg : public CDialog {
// 五个时间段时长(秒)
double m_dTimeStages[5];
// 五个条件标志(true=执行)
bool m_bCondition[5];
// 当前执行的时间段索引(0~4)
int m_nCurrentStage;
// 是否正在运行
bool m_bRunning;
// 线程运行标志
bool m_bThreadRunning;
// 高精度计时器
CElapsed m_elapsedTimer;
// 计时线程指针
CWinThread* m_pTimerThread;
// 临界区
CRITICAL_SECTION m_csSync;
};
2.2 条件控制机制改进
本次改进的核心是在原有五段时序控制基础上,为每个时间段增加了独立的条件控制:
- 每个时间段对应一个条件按钮,可独立切换"启用/禁用"状态
- 系统启动时严格从第一个启用的时间段开始执行
- 执行过程中会顺序检查每个时间段的条件状态
- 遇到禁用的时间段时,整个流程立即终止
这种设计特别适合需要根据外部传感器状态或用户输入动态调整流程的自动化场景。
3. 关键实现细节
3.1 高精度计时器的实现
系统使用自定义的CElapsed类实现高精度计时,核心原理是利用Windows API的QueryPerformanceCounter:
cpp复制class CElapsed {
public:
CElapsed() : m_start(0), m_freq(0) {
QueryPerformanceFrequency((LARGE_INTEGER*)&m_freq);
}
void Start() {
QueryPerformanceCounter((LARGE_INTEGER*)&m_start);
}
double NowSec() const {
__int64 now;
QueryPerformanceCounter((LARGE_INTEGER*)&now);
return double(now - m_start)/double(m_freq);
}
private:
__int64 m_start;
__int64 m_freq;
};
这种实现方式可以提供微秒级的时间测量精度,完全满足工业控制场景的需求。
3.2 条件按钮的交互实现
五个条件按钮采用统一的处理模式,通过按钮点击切换状态并更新UI:
code复制
