00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012
00013
00014
00015
00016
00017
00018
00019
00020
00021
00022
00023
00024
00025
00026
00027
00028 #ifndef _terimber_threadpool_factory_h_
00029 #define _terimber_threadpool_factory_h_
00030
00031 #include "log.h"
00032
00038 class terimber_thread_employer
00039 {
00040 public:
00042 virtual ~terimber_thread_employer()
00043 {
00044 }
00048 virtual
00049 bool
00050 v_has_job( size_t ident,
00051 void* user_data
00052 ) = 0;
00054 virtual
00055 void
00056 v_do_job( size_t ident,
00057 void* user_data
00058 ) = 0;
00059 };
00060
00063 class terimber_threadpool : public terimber_log_helper
00064 {
00065 public:
00067 virtual ~terimber_threadpool()
00068 {
00069 }
00071 virtual
00072 bool
00073 borrow_thread( size_t ident,
00074 void* data,
00075 terimber_thread_employer* client,
00076 size_t stay_on_alert_time_msec
00077 ) = 0;
00079 virtual
00080 bool
00081 borrow_from_range(size_t from,
00082 size_t to,
00083 void* data,
00084 terimber_thread_employer* client,
00085 size_t stay_on_alert_time_msec
00086 ) = 0;
00089 virtual
00090 void
00091 revoke_client( terimber_thread_employer* client
00092 ) = 0;
00094 virtual
00095 void
00096 doxray() = 0;
00097 };
00098
00104 class terimber_threadpool_factory
00105 {
00106 public:
00108 terimber_threadpool_factory();
00110 ~terimber_threadpool_factory();
00111
00114 terimber_threadpool*
00115 get_thread_pool(terimber_log* log,
00116 size_t capacity,
00117 size_t deactivate_time_msec
00118
00119 );
00120 };
00121
00122
00123 #endif
00124
00125