Lucene++ - a full-featured, c++ search engine
API Documentation


Loading...
Searching...
No Matches
ThreadPool.h
Go to the documentation of this file.
1
2// Copyright (c) 2009-2014 Alan Wright. All rights reserved.
3// Distributable under the terms of either the Apache License (Version 2.0)
4// or the GNU Lesser General Public License.
6
7#ifndef THREADPOOL_H
8#define THREADPOOL_H
9
10#include <boost/asio.hpp>
11#include <boost/any.hpp>
12#include <boost/thread/thread.hpp>
13#include "LuceneObject.h"
14
15namespace Lucene {
16
17typedef boost::shared_ptr<boost::asio::io_service::work> workPtr;
18
22class Future : public LuceneObject {
23public:
24 virtual ~Future();
25
26protected:
27 boost::any value;
28
29public:
30 void set(const boost::any& value) {
31 SyncLock syncLock(this);
32 this->value = value;
33 }
34
35 template <typename TYPE>
36 TYPE get() {
37 SyncLock syncLock(this);
38 while (value.empty()) {
39 wait(10);
40 }
41 return value.empty() ? TYPE() : boost::any_cast<TYPE>(value);
42 }
43};
44
46class ThreadPool : public LuceneObject {
47public:
49 virtual ~ThreadPool();
50
52
53protected:
54 boost::asio::io_service io_service;
56 boost::thread_group threadGroup;
57
58 static const int32_t THREADPOOL_SIZE;
59
60public:
63
64 template <typename FUNC>
66 FuturePtr future(newInstance<Future>());
67 io_service.post(boost::bind(&ThreadPool::execute<FUNC>, this, func, future));
68 return future;
69 }
70
71protected:
72 // this will be executed when one of the threads is available
73 template <typename FUNC>
74 void execute(FUNC func, const FuturePtr& future) {
75 future->set(func());
76 future->notifyAll();
77 }
78};
79
80}
81
82#endif
#define LUCENE_CLASS(Name)
Definition LuceneObject.h:24
A Future represents the result of an asynchronous computation. Methods are provided to check if the c...
Definition ThreadPool.h:22
boost::any value
Definition ThreadPool.h:27
virtual ~Future()
TYPE get()
Definition ThreadPool.h:36
void set(const boost::any &value)
Definition ThreadPool.h:30
Base class for all Lucene classes.
Definition LuceneObject.h:31
virtual void wait(int32_t timeout=0)
Wait for signal using an optional timeout.
Utility class to support scope locking.
Definition Synchronize.h:46
Utility class to handle a pool of threads.
Definition ThreadPool.h:46
FuturePtr scheduleTask(FUNC func)
Definition ThreadPool.h:65
virtual ~ThreadPool()
boost::asio::io_service io_service
Definition ThreadPool.h:54
boost::thread_group threadGroup
Definition ThreadPool.h:56
void execute(FUNC func, const FuturePtr &future)
Definition ThreadPool.h:74
static ThreadPoolPtr getInstance()
Get singleton thread pool instance.
workPtr work
Definition ThreadPool.h:55
static const int32_t THREADPOOL_SIZE
Definition ThreadPool.h:58
Definition AbstractAllTermDocs.h:12
boost::shared_ptr< Future > FuturePtr
Definition LuceneTypes.h:530
boost::shared_ptr< ThreadPool > ThreadPoolPtr
Definition LuceneTypes.h:553
boost::shared_ptr< boost::asio::io_service::work > workPtr
Definition ThreadPool.h:17

clucene.sourceforge.net