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 :
Si celle-ci est exécutée dans le main alors il faudra 1,5 secondes à la fonction getBestMove() pour retourner une valeur.
Code : Sélectionner tout - Visualiser dans une fenêtre à part
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();
La même chose, dans un QThread :
Prend 17 secondes!
Code : Sélectionner tout - Visualiser dans une fenêtre à part
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();
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
Partager