• Skip to content
  • Skip to link menu
  • KDE API Reference
  • kdelibs-4.10.2 API Reference
  • KDE Home
  • Contact Us
 

ThreadWeaver

  • threadweaver
  • Weaver
WeaverImpl.h
Go to the documentation of this file.
1 /* -*- C++ -*-
2 
3 This file implements the public interfaces of the WeaverImpl class.
4 
5 $ Author: Mirko Boehm $
6 $ Copyright: (C) 2005, 2006 Mirko Boehm $
7 $ Contact: mirko@kde.org
8 http://www.kde.org
9 http://www.hackerbuero.org $
10 
11  This library is free software; you can redistribute it and/or
12  modify it under the terms of the GNU Library General Public
13  License as published by the Free Software Foundation; either
14  version 2 of the License, or (at your option) any later version.
15 
16  This library is distributed in the hope that it will be useful,
17  but WITHOUT ANY WARRANTY; without even the implied warranty of
18  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
19  Library General Public License for more details.
20 
21  You should have received a copy of the GNU Library General Public License
22  along with this library; see the file COPYING.LIB. If not, write to
23  the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor,
24  Boston, MA 02110-1301, USA.
25 
26 $Id: WeaverImpl.h 32 2005-08-17 08:38:01Z mirko $
27 */
28 #ifndef WeaverImpl_H
29 #define WeaverImpl_H
30 
31 #include <QtCore/QObject>
32 #include <QtCore/QWaitCondition>
33 
34 #ifndef THREADWEAVER_PRIVATE_API
35 #define THREADWEAVER_PRIVATE_API
36 #endif
37 
38 #include "State.h"
39 #include "WeaverInterface.h"
40 
41 namespace ThreadWeaver {
42 
43  class Job;
44  class Thread;
45  class WeaverObserver;
46 
51  class WeaverImpl : public WeaverInterface
52  {
53  Q_OBJECT
54  public:
56  explicit WeaverImpl (QObject* parent=0 );
58  virtual ~WeaverImpl ();
59  const State& state() const;
60 
61  void setMaximumNumberOfThreads( int cap );
62  int maximumNumberOfThreads() const;
63  int currentNumberOfThreads () const;
64 
65 
67  void setState( StateId );
68  void registerObserver ( WeaverObserver* );
69  virtual void enqueue (Job*);
70  virtual bool dequeue (Job*);
71  virtual void dequeue ();
72  virtual void finish();
73  virtual void suspend( );
74  virtual void resume();
75  bool isEmpty () const;
76  bool isIdle () const;
77  int queueLength () const;
89  virtual Job* applyForWork (Thread *thread, Job *previous);
91  void blockThreadUntilJobsAreBeingAssigned(Thread *th);
93  void waitForAvailableJob(Thread *th);
95  void incActiveThreadCount();
97  void decActiveThreadCount();
101  int activeThreadCount();
107  Job* takeFirstAvailableJob();
111  void assignJobs();
112  void requestAbort();
113 
115  void dumpJobs();
116 
117  Q_SIGNALS:
119  void threadStarted ( ThreadWeaver::Thread* );
121  void threadExited ( ThreadWeaver::Thread* );
123  void threadSuspended ( ThreadWeaver::Thread* );
125  void threadBusy ( ThreadWeaver::Thread*, ThreadWeaver::Job* j);
126 
127  // FIXME (0.7) this seems to be unnecessary
128  // some more private Q_SIGNALS: There are situations where other threads
129  // call functions of (this). In this case, there may be confusion
130  // about whether to handle the signals synchronously or not. The
131  // following signals are asynchroneoulsy connected to their siblings.
132  void asyncThreadSuspended( ThreadWeaver::Thread* );
133 
134  protected:
137  void adjustActiveThreadCount ( int diff );
141  virtual Thread* createThread();
150  // @TODO: add code to raise inventory size over inventoryMin
151  // @TODO: add code to quit unnecessary threads
152  void adjustInventory ( int noOfNewJobs );
156 // void lock ();
157 // /** Unlock. See lock(). */
158 // void unlock ();
160  QList<Thread*> m_inventory;
162  QList<Job*> m_assignments;
165  int m_active;
167  int m_inventoryMax;
169  QWaitCondition m_jobAvailable;
171  QWaitCondition m_jobFinished;
172 
173  private:
175  QMutex *m_mutex;
176 
178  QMutex* m_finishMutex;
179 
181  QMutex* m_jobAvailableMutex;
182 
183  // @TODO: make state objects static
187  State* m_state;
189  State *m_states[NoOfStates];
190  };
191 
192 } // namespace ThreadWeaver
193 
194 #endif // WeaverImpl_H
This file is part of the KDE documentation.
Documentation copyright © 1996-2013 The KDE developers.
Generated on Tue Apr 16 2013 20:59:53 by doxygen 1.8.3.1 written by Dimitri van Heesch, © 1997-2006

KDE's Doxygen guidelines are available online.

ThreadWeaver

Skip menu "ThreadWeaver"
  • Main Page
  • Namespace List
  • Namespace Members
  • Alphabetical List
  • Class List
  • Class Hierarchy
  • Class Members
  • File List
  • File Members
  • Related Pages

kdelibs-4.10.2 API Reference

Skip menu "kdelibs-4.10.2 API Reference"
  • DNSSD
  • Interfaces
  •   KHexEdit
  •   KMediaPlayer
  •   KSpeech
  •   KTextEditor
  • kconf_update
  • KDE3Support
  •   KUnitTest
  • KDECore
  • KDED
  • KDEsu
  • KDEUI
  • KDEWebKit
  • KDocTools
  • KFile
  • KHTML
  • KImgIO
  • KInit
  • kio
  • KIOSlave
  • KJS
  •   KJS-API
  •   WTF
  • kjsembed
  • KNewStuff
  • KParts
  • KPty
  • Kross
  • KUnitConversion
  • KUtils
  • Nepomuk
  • Plasma
  • Solid
  • Sonnet
  • ThreadWeaver
Report problems with this website to our bug tracking system.
Contact the specific authors with questions and comments about the page contents.

KDE® and the K Desktop Environment® logo are registered trademarks of KDE e.V. | Legal