【发布时间】:2013-01-16 15:37:57
【问题描述】:
我已经在 qt 中实现了状态模式。
在我的 EnterIdleState 函数中,我连接了一个单次计时器来开始工作。在第一次调用时这工作正常,在第二次尝试时计时器没有触发,尽管连接像以前一样:
代码流是这样的:
SetNewState(newIdleState());
IdleState::doWork();
SetNewState(new WorkState());
WorkdState::doWork();
SetNewState(newIdleState());
SetNewState 如下所示:
void IridiumProcessor::SetNewState(State* pNewState)
{
if (m_pCurrentState)
{
m_pCurrentState->LeaveState();
delete m_pCurrentState;
}
m_pCurrentState = pNewState;
if (m_pCurrentState)
m_pCurrentState->EnterState();
}
在进入 IdleState 时,我连接了单次计时器:
void IdleState::EnterState()
{
QTimer::singleShot(1000,this,SLOT(OnTimeout()));
}
void IdleState::OnTimeout()
{
qDebug() << "IdleState OnTimeout";
}
当我使用 QTimer membervar 而不是静态 singleShot 调用时,也会发生同样的事情。
【问题讨论】:
-
当我试图重现这个问题时,出现了一个问题:你在哪里调用 SetNewState() 和 doWork()?它是单线程应用程序吗?会不会是你用一些冗长的操作阻塞了事件线程?
标签: qt