我正在做一个测量系统,我的程序中有一个 do while 循环。在循环中,它会在进行测量之前检查是否有任何电机在移动,因为它需要在执行任何操作之前到达目标位置。
在进行测量时,它应该告诉我进行此测量需要多长时间。
但是,每当它在 do while 循环中运行时,我所有的计时器功能都会停止,就好像它们进入了 sleep 模式一样。
还有其他方法可以实现吗?如果有,请帮助我。
如有任何帮助,我们将不胜感激。
SetTimer(TIMERECHO, 1000, NULL);
BOOL bMoving = FALSE;
do
{
if (IsMoving(ID, NULL, &bMoving))
GetPosition();
} while (bMoving);
void CLHMDlg::OnTimer(UINT_PTR nIDEvent)
{
// TODO: Add your message handler code here and/or call default
switch(nIDEvent)
{
case TIMERECHO:
UpdateData(FALSE);
m_Seconds++;
m_TimerEcho.Format(_T("Total time: %ds"), m_Seconds);
break;
}
CDialogEx::OnTimer(nIDEvent);
}
最佳答案
MFC 有一个消息循环,可以获取和分发 WM_TIMER 等消息。如果您执行 while 循环,则消息循环不会运行。它不是在 sleep ,它只是在等你停止占用处理器。
您有两个选择:(1) 摆脱冗长的循环并定期对 WM_TIMER 消息执行任何操作。 (2) 使用第二个线程做冗长的操作。这对初学者来说有很多困难。
关于c++ - MFC 执行 while 循环,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17736916/