aboutsummaryrefslogtreecommitdiffstatshomepage
path: root/node/dicerollernode.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'node/dicerollernode.cpp')
-rw-r--r--node/dicerollernode.cpp59
1 files changed, 57 insertions, 2 deletions
diff --git a/node/dicerollernode.cpp b/node/dicerollernode.cpp
index 735aacb..27750df 100644
--- a/node/dicerollernode.cpp
+++ b/node/dicerollernode.cpp
@@ -2,13 +2,40 @@
#include "die.h"
-
+#include <QThread>
+#include <QThreadPool>
#include <QDebug>
+#include <QTime>
+
+
+DiceRoller::DiceRoller(QMutex* mutex,DiceResult* diceResult,int faces,int count)
+ : m_mutex(mutex),m_sharedDiceResult(diceResult),m_faces(faces),m_diceCount(count)
+{
+
+}
+
+void DiceRoller::run()
+{
+ for(quint64 i=0; i < m_diceCount ; ++i)
+ {
+ Die* die = new Die();
+ die->setFaces(m_faces);
+ die->roll();
+ m_mutex->lock();
+ m_sharedDiceResult->insertResult(die);
+ m_mutex->unlock();
+ }
+}
+
+
+//////////////////////////////////////////////////
+/// \brief DiceRollerNode::DiceRollerNode
+//////////////////////////////////////////////////
DiceRollerNode::DiceRollerNode(quint64 faces)
: m_faces(faces),m_myDiceResult(new DiceResult())
{
-
+ m_mutex=new QMutex();
m_result=m_myDiceResult;
}
@@ -30,12 +57,40 @@ void DiceRollerNode::run(ExecutionNode* previous)
die->roll();
m_myDiceResult->insertResult(die);
}
+
+ /* quint64 threadCount = QThread::idealThreadCount();
+ if(threadCount>m_diceCount)
+ {
+ threadCount=m_diceCount;
+ }
+ quint64 dicePass = m_diceCount/threadCount;
+ quint64 remainingDiceCount=m_diceCount;
+
+ QThreadPool threadpool;
+
+
+ for(int i=threadCount-1;i>=0 && remainingDiceCount>0;--i)
+ {
+ remainingDiceCount-=dicePass;
+ if((remainingDiceCount<dicePass)||((i==0)&&(remainingDiceCount!=0)))
+ {
+ dicePass+=remainingDiceCount;
+ remainingDiceCount=0;
+ }
+ qDebug() << remainingDiceCount << dicePass << i << threadCount;
+ threadpool.start(new DiceRoller(m_mutex,m_myDiceResult,m_faces,dicePass));
+ }
+
+ threadpool.waitForDone();*/
if(NULL!=m_nextNode)
{
m_nextNode->run(this);
}
}
}
+
+
+
}
quint64 DiceRollerNode::getFaces()