在定时器回调函数中使用 Sleep() 会导致C++出现问题吗?
Does using Sleep() in the timer callback function can cause problems in C++?
我有一个关于计时器和睡眠的问题。我正在使用 MFC 创建一个 UI,并且我已经为特定对话框设置了一个 200 毫秒的计时器。因此,每 200 毫秒调用 OnTimer 函数。在这个函数中,我包含了函数 Sleep(50(。所以这里将是代码的简化。
BEGIN_MESSAGE_MAP(MainDialog, CDialog)
...
ON_WM_TIMER()
...
END_MESSAGE_MAP()
BOOL MainDialog::OnInitDialog() {
...
SetTimer(1, 200, NULL);
...
}
void MainDialog::OnTimer(UINT nIDEvent) {
...
Sleep(50)
...
}
那么这段代码会导致任何潜在的问题或麻烦吗?并且使用睡眠函数,OnTimer 将在 OnTimer 整个执行后 150 毫秒或 OnTimer 函数执行后 200 毫秒后再次调用。我问这个是因为我的代码包含一个错误,并且想知道这是否可能是它的来源。提前感谢您的宝贵帮助。
1(GUI中的睡眠命令(在您的情况下是一个对话框(会使您的界面变得迟钝,因此请避免使用它。
2( 在您的情况下,OnTimer 成员函数大约每 200 毫秒时钟滴答调用一次。但是,如果函数 OnTimer(( 的执行持续时间超过 200 毫秒,则计时器将在先前的调用完成后立即再次调用,从而导致错误计时。
3( OnTimer(( 对于时间关键型作品不准确,请使用基于 std::chrono::high_resolution_clock 的格式。
相关文章:
- 警告处理为错误这里有什么问题
- 最小硬币更换问题(自上而下方法)
- 为"adjacent"变量赋值时出现问题
- 我的神经网络不起作用 [XOR 问题]
- 在Ubuntu 16.04上安装Cilk时出现问题
- C++我的数学有什么问题,为什么我的代码不能正确循环
- 编译包含字符串的代码时遇到问题
- Project Euler问题4的错误解决方案
- 问题:什么是QAbstractItemView::NoEditTriggers的反面
- 在编译C++代码(具有dlib和opencv)到WASM时面临问题
- 在进程中对同一管道进行读取和写入时C++管道出现问题
- 静态数据成员的问题-修复链接错误会导致编译器错误
- C++ 雷神库 - 使用资源加载器类时出现问题(不命名类型)
- 一个关于在C++中重载布尔运算符的问题
- 首要问题的答案让值班员搞错了
- setlocale的C++土耳其字符串问题
- 如何重构类层次结构以避免菱形问题
- 基于boost的程序的静态链接——zlib问题
- C++格式化输出问题
- 使用mongocxx驱动程序时包含头文件问题