新浪博客

多线程切换后执行语句的不确定性

2022-03-14 16:35阅读:
无线键盘加号键按下
void Mode1Wx::keyPlus()
{
qDebug()<<'plus press';
pressKey=Key_Plus;
ui->forwardBtn->mpress();
}
无线键盘减号键按下
void Mode1Wx::keyMinus()
{
qDebug()<<'minus press';
pressKey=Key_Minus;
ui->backwardBtn->mpress();
}
无线键盘按键释放
void Mode1Wx::keyRelease()
{
qDebug()<<'key release'<<pressKey;
if(pressKey==Key_Plus)
{
qDebug()<<'plus release';
ui->forwardBtn->mrelease();
pressKey=0;
}
else if(pressKey==Key_Minus)
{
qDebug()<<'minus release';
ui->backwardBtn->mrelease();
pressKey=0;
}
}
void FeedPushButton::mousePressEvent(QMouseEvent *event)
{
FunLib::playAudio('default.wav');//多线程播放语音
QPushButton::mousePressEvent(event);
qDebug()<<'timer1 start';
timer1->start(500);
emit feedPushButtonPress();
}
void FeedPushButton::mouseReleaseEvent(QMouseEvent *event)
{
QPushButton::mouseReleaseEvent(event);
timer1->stop();
timer2->stop();
qDebug()<<'timer12 stop';
}
按住减号键马上抬起,先收到键盘按下信号,后收到键盘抬起信号,但是有时候出现先打印timer12 stop,后打印timer1 start的问题。
原因:多线程的问题,按下的时候播放语音是个多线程,播放过程中,线程切换可能会执行qDebug()<<'timer1 start';也可能会执行 qDebug()<<'timer12 stop';

我的更多文章

下载客户端阅读体验更佳

APP专享