wie einfach zu verstehen sie ist wenn man das Grundkonzept verstanden hat.
Naja, das Grundprizip isss recht einfach, ja, nur die konsequenzen sind ...naja oft ned ueberschaubar ^^
Also ich komm auch oft noch ins straucheln .... und muss ne weile ueberlegen ....
- Aus welchen thread komm ich eigentlich ?
- welche threads verwenden diese Variable, muss ich die schuetzen oder ned ??? ...
- wie vermeide ich unnötige rechenzeit ... nen thread staendig gegen nen event / ne variable pollen lassen freut das energiemanagment ned wirklich. und sleep im thread ... naja, iss irgendwie thema verfehlt ^^ damit wird der thread träge.
Einen SLOT in deiner Thread-Klasse, der einen bool setzt. Z.B.
Kann ne beose falle sein !
nen bool iss zu 90% nen int aka 4 byte.
zu nem rest von 30% iss also ein
bool bx;
bx=true; <- keine atomare operation
Da dich unvollstaendige bools aber kaum intressieren (dich intressiert nur das 1 byte), gehts zu 99% trotzdem gut.
"schoen" isses aber trotzdem ned.
nen bool zu schuetzen mitm Mutex iss aber auch ned der heilige gral.
besser, atomare operationen verwenden (leider meist BS abhaengig) ,
aber die QT hat da was vorbereitet: QAtomicInt
oder Events(im sinne von IPC) verwenden. -> QWaitCondition
Vieles was einfach erscheint wird plötzlich wahnisnnig komplex bei multithreading.
QWaitCondition mCondTerminate;
Code: Alles auswählen
void MyThread::stopCalculation()
{
mCondTerminate.wakeAll();
}
Code: Alles auswählen
bool bcont = true;
do
{
//// irgendws wildes tun ....
/// Abbruch bedingungen checken
if(mCondTerminate.wait(NULL,0)) /// meist hat man aber nen Mutex zum entlocken fuer den 1. parameter ... fuer 0 millisekunken aber eh witzlos.
{
bcont = false;
}
} while(bcont);
Sicher ned der performanteste Weg, aber MT technisch sauberer.
wie gesagt der einfache bool weg wird unter 32bit wahrscheinlich immer gehen, unter 64 bit hoechstwahrscheinlich auch gehen, iss aber ned MTed gedacht.
Sobald deine Abbruchbedinung erweiters aka ... && !m_stop && !mPause .... wird das ganze viel undefinierter.
Muss auch zugeben ich mach mit der QT und MT ned allzuviel. Ich mach mehr auf der winapi direkt ...
Ciao ...