15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
|
* file.
*/
#import "OFObject.h"
OF_ASSUME_NONNULL_BEGIN
/*! @file */
#ifdef OF_HAVE_BLOCKS
/*!
* @brief A block for a job which should be executed in a thread pool.
*/
typedef void (^of_thread_pool_block_t)(void);
#endif
@class OFCondition;
@class OFList OF_GENERIC(ObjectType);
@class OFMutableArray OF_GENERIC(ObjectType);
@class OFThreadPoolJob;
/*!
* @class OFThreadPool OFThreadPool.h ObjFW/OFThreadPool.h
*
* @brief A class providing a pool of reusable threads.
*
* @note When the thread pool is released, all threads will terminate after
* they finish the job they are currently processing.
*/
|
|
|
|
|
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
|
* file.
*/
#import "OFObject.h"
OF_ASSUME_NONNULL_BEGIN
/** @file */
#ifdef OF_HAVE_BLOCKS
/**
* @brief A block for a job which should be executed in a thread pool.
*/
typedef void (^of_thread_pool_block_t)(void);
#endif
@class OFCondition;
@class OFList OF_GENERIC(ObjectType);
@class OFMutableArray OF_GENERIC(ObjectType);
@class OFThreadPoolJob;
/**
* @class OFThreadPool OFThreadPool.h ObjFW/OFThreadPool.h
*
* @brief A class providing a pool of reusable threads.
*
* @note When the thread pool is released, all threads will terminate after
* they finish the job they are currently processing.
*/
|
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
|
#endif
OFList *_queue;
OFCondition *_queueCondition;
volatile int _doneCount;
OFCondition *_countCondition;
}
/*!
* @brief The size of the thread pool.
*/
@property (readonly, nonatomic) size_t size;
/*!
* @brief Returns a new thread pool with one thread for each core in the system.
*
* @warning If for some reason the number of cores in the system could not be
* determined, the pool will only have one thread!
*
* @return A new thread pool with one thread for each core in the system
*/
+ (instancetype)threadPool;
/*!
* @brief Returns a new thread pool with the specified number of threads.
*
* @param size The number of threads for the pool
* @return A new thread pool with the specified number of threads
*/
+ (instancetype)threadPoolWithSize: (size_t)size;
/*!
* @brief Initializes an already allocated OFThreadPool with the specified
* number of threads.
*
* @param size The number of threads for the pool
* @return An initialized OFThreadPool with the specified number of threads
*/
- (instancetype)initWithSize: (size_t)size OF_DESIGNATED_INITIALIZER;
/*!
* @brief Execute the specified selector on the specified target with the
* specified object as soon as a thread is ready.
*
* @param target The target on which to perform the selector
* @param selector The selector to perform on the target
* @param object The object with which the selector is performed on the target
*/
- (void)dispatchWithTarget: (id)target
selector: (SEL)selector
object: (nullable id)object;
#ifdef OF_HAVE_BLOCKS
/*!
* @brief Executes the specified block as soon as a thread is ready.
*
* @param block The block to execute
*/
- (void)dispatchWithBlock: (of_thread_pool_block_t)block;
#endif
/*!
* @brief Waits until all jobs are done.
*/
- (void)waitUntilDone;
@end
OF_ASSUME_NONNULL_END
|
|
|
|
|
|
|
|
|
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
|
#endif
OFList *_queue;
OFCondition *_queueCondition;
volatile int _doneCount;
OFCondition *_countCondition;
}
/**
* @brief The size of the thread pool.
*/
@property (readonly, nonatomic) size_t size;
/**
* @brief Returns a new thread pool with one thread for each core in the system.
*
* @warning If for some reason the number of cores in the system could not be
* determined, the pool will only have one thread!
*
* @return A new thread pool with one thread for each core in the system
*/
+ (instancetype)threadPool;
/**
* @brief Returns a new thread pool with the specified number of threads.
*
* @param size The number of threads for the pool
* @return A new thread pool with the specified number of threads
*/
+ (instancetype)threadPoolWithSize: (size_t)size;
/**
* @brief Initializes an already allocated OFThreadPool with the specified
* number of threads.
*
* @param size The number of threads for the pool
* @return An initialized OFThreadPool with the specified number of threads
*/
- (instancetype)initWithSize: (size_t)size OF_DESIGNATED_INITIALIZER;
/**
* @brief Execute the specified selector on the specified target with the
* specified object as soon as a thread is ready.
*
* @param target The target on which to perform the selector
* @param selector The selector to perform on the target
* @param object The object with which the selector is performed on the target
*/
- (void)dispatchWithTarget: (id)target
selector: (SEL)selector
object: (nullable id)object;
#ifdef OF_HAVE_BLOCKS
/**
* @brief Executes the specified block as soon as a thread is ready.
*
* @param block The block to execute
*/
- (void)dispatchWithBlock: (of_thread_pool_block_t)block;
#endif
/**
* @brief Waits until all jobs are done.
*/
- (void)waitUntilDone;
@end
OF_ASSUME_NONNULL_END
|