Уважаемый ALL!
Опять взываю к вашей помощи!
Есть класс, унаследованный от QThread.
Данный класс запускается по нажатию на кнопку «Start» в GUI (название кнопки меняется на «Stop» и по нажатию на этот «Stop» все расчеты должны прекратиться).
из метода run вызывается go():
void ExtrThread::go(){
emit started();
/*SpiceExtr*/ *spe;
spe= new SpiceExtr(path);
connect(spe, SIGNAL(startModelChanging()), this, SLOT(MEdStarted()));
connect(spe, SIGNAL(stopModelChanging()), this, SLOT(MEdStoped()));
........
spe->MultiRun(dim, x, fx, result);
emit stopped(cur);
}
void SpiceExtr::setSpiceInputValues(string sl){
emit startModelChanging();
..................................
QFile new_f(QString::fromStdString(filename.c_str()));
QFile old_f(QString::fromStdString(sl.c_str()));
if(old_f.open(QIODevice::ReadWrite)){
if(new_f.open(QIODevice::ReadWrite)){
QTextStream in_stream( &old_f );
QTextStream out_stream( &new_f );
QString line;
while(!in_stream.atEnd()){
............................
}
}else{
qDebug()<<"setSpiceInputValues NewFil Error\n";
exit(0);
}
}else{
qDebug()<<"setSpiceInputValues OldFil Error\n";
exit(0);
}
old_f.close();
new_f.close();
if(old_f.remove()){
if(!new_f.rename(QString::fromStdString(sl.c_str()))){
qDebug()<<"Error file"<< QString::fromStdString(filename.c_str())<<" renaming failed\n";
exit(0);
}else {
}
}else{
}
emit stopModelChanging();
};
setSpiceInputValues OldFil Error
Вот так я все убиваю:
void ExtrThread::kill(){
if(yesToKill) {
del();
spe->deleteLater();
delete spe;
this->terminate();
this->exit();
}
}
А как правильно?
SpiceExtr изначально делался для консольного приложения, поэтому можно наследовать от чего угодно (пока это QObject).
З.Ы За помесь STL и QT прошу не ругать. Устрою субботник и все подправлю).