QTimer make traitement out of for loop ?
-
QTimer::singleShot :This static function calls a slot after a given time interval; in my case i want the code to make the traitement inside QTimer::singleShot before it pass to make the next if condition .
@imene said in QTimer make traitement out of for loop ?:
to make the traitement inside QTimer::singleShot before it pass to make the next if condition .
Let the QTimer::singleShot() fire and check for your codition inside the slot.
-
@Christian-Ehrlicher how ?
-
@Christian-Ehrlicher how ?
@imene said in QTimer make traitement out of for loop ?:
how ?
if (yourCoditionIsMet) { doSomethingYouWant() }
maybe?
-
@Christian-Ehrlicher
my condition is to wait for QTimer::singleShot() to be executed -
@Christian-Ehrlicher
my condition is to wait for QTimer::singleShot() to be executed@imene said in QTimer make traitement out of for loop ?:
my condition is to wait for QTimer::singleShot() to be executed
Why?
If you want to stop a timer, use a QTimer object and stop it if you want. -
This timer
connect(m_speedTimer, &QTimer::timeout, this, &MainWindow::on_Send_Row_Button_clicked);
if( trameRecu[0]==trameTest[0]){ qDebug() <<"Test FF good!"; //model dialogue informing mModel->item(b, 4)->setText("FF");//ack m_speedTimer->start(8000); QTimer::singleShot(7000, [=](){ qDebug()<<"Timer on do something after 7000 msec..."; if((Send_Frame_Get_ACK_Function(SetPayloadRPM))=="FF") { qDebug() << "Send_Frame_Get_ACK_Function Pass" ; QString MySpeed=0; MySpeed = Send_Frame_Get_Speed_Function(NSetPayload); //SetPayloadMem="F504" qDebug() << " MySpeed" <<MySpeed; double MSpeed = MySpeed.toFloat(); qDebug() << " MSpeed" <<MSpeed; bool result = ((MSpeed >= 40) && (MSpeed <= 60)); qDebug() << "((MSpeed >= 40) && (MSpeed <= 60))" << result; result = ((MSpeed >= 90) && (MSpeed <= 110) ); qDebug() << "((MSpeed >= 90) && (MSpeed <= 110))" << result; result = ((MSpeed >= 490) && (MSpeed <= 520) ); qDebug() << "((MSpeed >= 490) && (MSpeed <= 520))" << result; if ((MSpeed > 40) && (MSpeed < 60) ) {mModel->item(b, 6)->setText("+50");}//result else if ((MSpeed > 90) && (MSpeed < 110)) {mModel->item(b, 6)->setText("+100");}//result else if ((MSpeed > 140) && (MSpeed < 160)) {mModel->item(b, 6)->setText("+150");}//result else if ((MSpeed > 190) && (MSpeed < 210)) {mModel->item(b, 6)->setText("+200");}//result else if ((MSpeed > 240) && (MSpeed < 260)) {mModel->item(b, 6)->setText("+100");}//result else if ((MSpeed > 290) && (MSpeed < 310)) {mModel->item(b, 6)->setText("+100");}//result else if ((MSpeed >490) && (MSpeed < 520)) {mModel->item(b, 6)->setText("+500");}//result else {mModel->item(b, 6)->setText("Error"); qDebug() << " MSpeed if" <<MSpeed;}//result } m_speedTimer->stop(); });//singleshot timer here }
m_speedTimer->start(8000);
repeat the traitement under it each 8000 but when i use m_speedTimer->stop(); it make traitement one time and stops without waiting 8000 msec!
I need a timer that make traitement after 8000msec. -
This timer
connect(m_speedTimer, &QTimer::timeout, this, &MainWindow::on_Send_Row_Button_clicked);
if( trameRecu[0]==trameTest[0]){ qDebug() <<"Test FF good!"; //model dialogue informing mModel->item(b, 4)->setText("FF");//ack m_speedTimer->start(8000); QTimer::singleShot(7000, [=](){ qDebug()<<"Timer on do something after 7000 msec..."; if((Send_Frame_Get_ACK_Function(SetPayloadRPM))=="FF") { qDebug() << "Send_Frame_Get_ACK_Function Pass" ; QString MySpeed=0; MySpeed = Send_Frame_Get_Speed_Function(NSetPayload); //SetPayloadMem="F504" qDebug() << " MySpeed" <<MySpeed; double MSpeed = MySpeed.toFloat(); qDebug() << " MSpeed" <<MSpeed; bool result = ((MSpeed >= 40) && (MSpeed <= 60)); qDebug() << "((MSpeed >= 40) && (MSpeed <= 60))" << result; result = ((MSpeed >= 90) && (MSpeed <= 110) ); qDebug() << "((MSpeed >= 90) && (MSpeed <= 110))" << result; result = ((MSpeed >= 490) && (MSpeed <= 520) ); qDebug() << "((MSpeed >= 490) && (MSpeed <= 520))" << result; if ((MSpeed > 40) && (MSpeed < 60) ) {mModel->item(b, 6)->setText("+50");}//result else if ((MSpeed > 90) && (MSpeed < 110)) {mModel->item(b, 6)->setText("+100");}//result else if ((MSpeed > 140) && (MSpeed < 160)) {mModel->item(b, 6)->setText("+150");}//result else if ((MSpeed > 190) && (MSpeed < 210)) {mModel->item(b, 6)->setText("+200");}//result else if ((MSpeed > 240) && (MSpeed < 260)) {mModel->item(b, 6)->setText("+100");}//result else if ((MSpeed > 290) && (MSpeed < 310)) {mModel->item(b, 6)->setText("+100");}//result else if ((MSpeed >490) && (MSpeed < 520)) {mModel->item(b, 6)->setText("+500");}//result else {mModel->item(b, 6)->setText("Error"); qDebug() << " MSpeed if" <<MSpeed;}//result } m_speedTimer->stop(); });//singleshot timer here }
m_speedTimer->start(8000);
repeat the traitement under it each 8000 but when i use m_speedTimer->stop(); it make traitement one time and stops without waiting 8000 msec!
I need a timer that make traitement after 8000msec.@imene said in QTimer make traitement out of for loop ?:
t make traitement one time and stops without waiting 8000 msec!
Then remember that you want to stop your timer after the next timeout and stop it then.
-
@imene said in QTimer make traitement out of for loop ?:
What does m_speedTimer->start(8000); and m_speedTimer->stop(); do exactely ?
Really??
-
I want a timer that stop reading the code for 7sec then complete and execute the function, because singleShot timer execute function after 7 sec here:
QTimer::singleShot(7000, [=](){ qDebug()<<"Timer on do something after 6 second..."; // i want to set a time out condition here });//timer ends here
-
I want a timer that stop reading the code for 7sec then complete and execute the function, because singleShot timer execute function after 7 sec here:
QTimer::singleShot(7000, [=](){ qDebug()<<"Timer on do something after 6 second..."; // i want to set a time out condition here });//timer ends here
@imene said in QTimer make traitement out of for loop ?:
qDebug()<<"Timer on do something after 6 second...";
QTimer::singleShot(7000, ={
Maybe you should at least add a correct comment...
We already told you how to start a timer, how to stop it and how you set a (member) variable to not execute something if this variable is set to a certain value is nothing we need to discuss here - it's a task for a c++ beginners book.
-
what i have to do ?
QObject::connect(m_speedTimer,&QTimer::timeout, this, &MainWindow::sendFrame,Qt::AutoConnection);
void MainWindow::sendFrame(QString IdData_R,QString PayloadData_R,int i) { if (m_canDevice) { m_speedTimer->start(6000); ... } }
void MainWindow::on_SendAll_Button_clicked() {int a= m_ui->Table_CSV->model()->rowCount(); for(int i=0;i<a; i++) //R :read , W :write { sendFrame(IdData_R, PayloadData_R,i);//}); } m_speedTimer->stop(); }
-
what i have to do ?
QObject::connect(m_speedTimer,&QTimer::timeout, this, &MainWindow::sendFrame,Qt::AutoConnection);
void MainWindow::sendFrame(QString IdData_R,QString PayloadData_R,int i) { if (m_canDevice) { m_speedTimer->start(6000); ... } }
void MainWindow::on_SendAll_Button_clicked() {int a= m_ui->Table_CSV->model()->rowCount(); for(int i=0;i<a; i++) //R :read , W :write { sendFrame(IdData_R, PayloadData_R,i);//}); } m_speedTimer->stop(); }