Différences de performances entre thread principal et QThread
Bonjour à tous,
Voilà j'ai un petit soucis que je n'arrive pas à régler, et j'en appelle donc à vos conseils ou avis. Un même code exécuté dans le main() ou dans le run() d'un QThread ne prend pas du tout le même temps d'exécution :/
La portion de code utilisée :
Code:
1 2 3 4 5 6 7 8 9 10 11
|
GameOptions go;
go.minCardLvl = 0;
go.maxCardLvl = 1;
go.gameRules = 0;
go.gainMode = 0;
MinMaxTree *minmaxtree = new MinMaxTree();
minmaxtree->setBoard(new GameBoard());
minmaxtree->setGameOptions(&go);
minmaxtree->setBlueCC( new CardCollection("0 1 2 3 4 ") );
minmaxtree->getBestMove(); |
Si celle-ci est exécutée dans le main alors il faudra 1,5 secondes à la fonction getBestMove() pour retourner une valeur.
La même chose, dans un QThread :
Code:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24
|
class TestAI : public QThread {
public:
TestAI(QObject *parent=0) : QThread(parent) {
}
protected:
void run() {
GameOptions go;
go.minCardLvl = 0;
go.maxCardLvl = 1;
go.gameRules = 0;
go.gainMode = 0;
MinMaxTree *minmaxtree = new MinMaxTree();
minmaxtree->setBoard(new GameBoard());
minmaxtree->setGameOptions(&go);
minmaxtree->setBlueCC( new CardCollection("0 1 2 3 4 ") );
minmaxtree->getBestMove();
}
};
TestAI ai;
ai.start(); |
Prend 17 secondes!
J'ai essayé de voir du côté des signaux/slots puisque le GameBoard utilise ce mécanisme en interne pour détecter les changements de score, mais rien ne change en l'enlevant..
En rajoutant moveToThread(this) dans le run et le parent aux différents QObjects utilisés, idem je n'arrive pas à retrouver les performances de l'algo appelé dans le main()
Vous avez une petite idée? là je sèche :/
Merci