在定时器回调函数中使用 Sleep() 会导致C++出现问题吗?

Does using Sleep() in the timer callback function can cause problems in C++?

本文关键字:C++ 问题 函数 回调 定时器 Sleep      更新时间:2023-10-16

我有一个关于计时器和睡眠的问题。我正在使用 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 的格式。