我一直在为不同的学生代码设置一个测试模拟器。它需要在学生代码期间间歇性地模拟机器人的运动代码。因此,无论学生代码期间发生了什么,它可能每 50 毫秒都会运行一个传感器功能和一个运动功能(稍后优化时间)。我写了一堆应该创建正确线程等的代码,但是一个代码总是最终等待另一个代码。然后我只简化到基础,但无论我使用什么设置,代码都会按顺序运行。我的代码和输出以我可以放入的最简单的方式在下面。
定时器类:
Timer::Timer(int delayLength){
timer = new QTimer(this);
connect(timer, SIGNAL(timeout()),this, SLOT(MySlot()));
qDebug() << "Timer Initialized";
isTimerRunning = true;
timer->start(delayLength);
}
void Timer::StopMovement(){
stoppingMutex.lock();
isTimerRunning = false;
stoppingMutex.unlock();
}
void Timer::MySlot(){
stoppingMutex.lock();
if(isTimerRunning){
qDebug() << "Timer Executed";
}
else{
timer->stop();
}
stoppingMutex.unlock();
}
主类:
int main(int argc, char *argv[]){
QApplication app(argc, argv);
Timer mTimer(100);
for(int i = 0; i<5;i++){
QThread::sleep(1);
qDebug()<< "Slept";
}
qDebug() << "Finished";
return app.exec();
}
我希望这段代码打印很多“计时器执行”,并带有间歇性的消息“睡眠”实例,而不是我得到:
Timer Initialized
Slept
Slept
Slept
Slept
Slept
Finished
Timer Executed
Timer Executed
Timer Executed
Timer Executed
(...)