İnsanın, yazılımı çalması için sipariş ettiği herhangi bir zamanda kesebileceği bir Git programı uygulamıyorum. Temel olarak, her an bir "En İyi Hareket" e sahip olan ve gelişmeye devam eden başka bir iş parçacığında çalışan bir algoritmam var.QThread sonsuz döngüsünü düzgün bir şekilde kesmek için
Soruma soru sormak istiyorum: Sonsuz döngüde bir iş parçacığı nasıl doğru şekilde keserim?
bir kaç şey denedik ve bunu yapmak için çözdüğünüz:
class MyWorker : public QObject
{
Q_OBJECT
public:
MyWorker();
~MyWorker();
public:
ThreadControl * getThreadControl();
public slots:
void work();
private:
void endOfComputation();
private:
ThreadControl * threadControl;
}
Bildirimi ben don't subclass QThread:
class ThreadControl : public QObject
{
Q_OBJECT
public:
ThreadControl();
public:
bool getAbort();
Parameter getParameter();
void setParameter(Parameter & param);
public slots:
void setAbort(bool b);
private:
QMutex mutex;
bool abort;
Parameter param;
};
Ve son olarak, sonsuz döngü bu şekilde kodlanmıştır: Eğeryılında, tahmin edebilirsiniz Sonra
void Myworker::work()
{
// ...
forever
{
abort = threadControl->getAbort();
if(abort)
{
break;
}
// ...
}
endOfComputation();
}
, 10, düzenli ben sadece ana iş parçacığı bir mantıksal değere bir işaretçi tutmak, Temelde ThreadControl::setAbort(true)
arayıp istediğinizde bunu geçiş. (Boolean, ThreadControl
içinde kapsüllenir; böylece bir muteks ile düzgün şekilde kilitleyebilirim). Şimdiye kadar çok iyi, benim için çalıştı ... Ama bana iğrenç geliyor! Booleanlar için işaretçiler ses gibi geliyor ... kötü programlama bana ...
Sorun, web'deki belgelerin çoğunlukla (tamamen? için. Bir iş parçacığı kesiliyor değil, bu yüzden soruyorum: Daha iyi bir yolu var mı?
boost iplik QThread ile çalışmıyor:
Ben de ile döngü değiştireceksiniz. insanlar qt genellikle kullanır çünkü bu bir qt gui uygulamasıdır. –
Amacım, bu ileti dizisini kesmenin başka bir yolunu sağlamaktı. Örnek bir uygulama eklendi. – tibur