32 #include <QtCore/QSet>
33 #include <QtCore/QList>
34 #include <QtCore/QMutex>
35 #include <QtCore/QObject>
36 #include <QtCore/QMap>
37 #include <QtCore/QArgument>
38 #include <QtCore/QWaitCondition>
45 using namespace ThreadWeaver;
47 class ThreadWeaver::QueuePolicyList :
public QList<QueuePolicy*> {};
54 , queuePolicies ( new QueuePolicyList )
55 , mutex (new QMutex (QMutex::NonRecursive) )
69 QueuePolicyList* queuePolicies;
84 for (
int index = 0; index <
d->queuePolicies->size(); ++index )
86 d->queuePolicies->at( index )->destructed(
this );
100 job->
d->mutex->lock();
102 job->
d->mutex->unlock();
104 emit ( started ( job ) );
108 job->
d->mutex->lock();
111 job->
d->mutex->unlock();
116 emit ( failed( job ) );
119 emit ( done( job ) );
133 debug(3,
"Job::execute: executing job of type %s %s in thread %i.\n",
134 metaObject()->className(), objectName().isEmpty() ?
"" : qPrintable( objectName() ), th->
id());
136 debug(3,
"Job::execute: finished execution of job in thread %i.\n", th->
id());
151 for (
int index = 0; index <
d->queuePolicies->size(); ++index )
153 d->queuePolicies->at( index )->free(
this );
167 QueuePolicyList acquired;
171 if (
d->queuePolicies->size() > 0 )
173 debug( 4,
"Job::canBeExecuted: acquiring permission from %i queue %s.\n",
174 d->queuePolicies->size(),
d->queuePolicies->size()==1 ?
"policy" :
"policies" );
175 for (
int index = 0; index <
d->queuePolicies->size(); ++index )
177 if (
d->queuePolicies->at( index )->canRun(
this ) )
179 acquired.append(
d->queuePolicies->at( index ) );
186 debug( 4,
"Job::canBeExecuted: queue policies returned %s.\n", success ?
"true" :
"false" );
191 for (
int index = 0; index < acquired.size(); ++index )
193 acquired.at( index )->release(
this );
197 debug( 4,
"Job::canBeExecuted: no queue policies, this job can be executed.\n" );
205 if ( !
d->queuePolicies->contains( policy ) )
207 d->queuePolicies->append( policy );
213 int index =
d->queuePolicies->indexOf( policy );
216 d->queuePolicies->removeAt( index );
232 d->finished = status;