summaryrefslogtreecommitdiff
path: root/cppu/inc/uno/threadpool.h
diff options
context:
space:
mode:
authorJörg Budischewski <jbu@openoffice.org>2001-05-08 14:55:56 +0000
committerJörg Budischewski <jbu@openoffice.org>2001-05-08 14:55:56 +0000
commitcb137b6a1466cc0be87fd5e10c8de5ecb23118c0 (patch)
tree9a71b47b0b9f0b638ca8ed4ec4227764198b88e5 /cppu/inc/uno/threadpool.h
parent1c1a9144a560f7c5070df23ec2c2b5db54d38862 (diff)
incompatible change of the uno threadpool
Diffstat (limited to 'cppu/inc/uno/threadpool.h')
-rw-r--r--cppu/inc/uno/threadpool.h213
1 files changed, 109 insertions, 104 deletions
diff --git a/cppu/inc/uno/threadpool.h b/cppu/inc/uno/threadpool.h
index 82431a4d376a..ca7db2322829 100644
--- a/cppu/inc/uno/threadpool.h
+++ b/cppu/inc/uno/threadpool.h
@@ -2,9 +2,9 @@
*
* $RCSfile: threadpool.h,v $
*
- * $Revision: 1.4 $
+ * $Revision: 1.5 $
*
- * last change: $Author: dbo $ $Date: 2001-03-28 10:46:06 $
+ * last change: $Author: jbu $ $Date: 2001-05-08 15:55:09 $
*
* The Contents of this file are made available subject to the terms of
* either of the following licenses
@@ -70,141 +70,146 @@ extern "C" {
* Thread identifier administration.
***/
/**
- * Establishs an association between the current thread an the given thread identifier.
- * There can be only one association at a time. The association must be broken by
- * uno_releaseIdFromCurrentThread.
- * This method is in general called by a bridge, that wants to bind a remote threadId
- * to a new thread.
- *
- * @param pThreadId a byte sequence, that contains the identifier of the current thread.
- * @return true, when the identifier was registered. <br>
- * false, when the thread has already an identifier. The identifier was not
- * altered. ( This is in general a bug ). <br>
- **/
+ Establishs an association between the current thread an the given thread identifier.
+ There can be only one association at a time. The association must be broken by
+ uno_releaseIdFromCurrentThread.
+ This method is in general called by a bridge, that wants to bind a remote threadId
+ to a new thread.
+
+ @param pThreadId a byte sequence, that contains the identifier of the current thread.
+ @return true, when the identifier was registered. <br>
+ false, when the thread has already an identifier. The identifier was not
+ altered. ( This is in general a bug ). <br>
+ */
sal_Bool SAL_CALL uno_bindIdToCurrentThread( sal_Sequence *pThreadId )
SAL_THROW_EXTERN_C();
/**
- * Get the identifier of the current thread.
- * If no id has been bound for the thread before, a new one is generated and bound
- * to the thread.
- * For each call to uno_getIdOfCurrentThread, a call to uno_releaseIdFromCurrentThread
- * must be done.
- *
- * @param ppThreadId [out] Contains the (acquired) ThreadId.
- **/
+ Get the identifier of the current thread.
+ If no id has been bound for the thread before, a new one is generated and bound
+ to the thread.
+ For each call to uno_getIdOfCurrentThread, a call to uno_releaseIdFromCurrentThread
+ must be done.
+
+ @param ppThreadId [out] Contains the (acquired) ThreadId.
+ */
void SAL_CALL uno_getIdOfCurrentThread( sal_Sequence **ppThreadId )
SAL_THROW_EXTERN_C();
/**
- * If the internal refcount drops to zero, the association betwen threadId and
- * thread is broken.
- **/
+ If the internal refcount drops to zero, the association betwen threadId and
+ thread is broken.
+ */
void SAL_CALL uno_releaseIdFromCurrentThread()
SAL_THROW_EXTERN_C();
+struct _uno_ThreadPool;
+typedef struct _uno_ThreadPool * uno_ThreadPool;
+
/**
- * The threadpool
- **/
-struct uno_threadpool_Handle;
+ Creates a threadpool handle. Typically each remote bridge instances creates one
+ handle.
+ */
+uno_ThreadPool SAL_CALL
+uno_threadpool_create() SAL_THROW_EXTERN_C();
+
+
/**
- * Create a handle for the current thread before entering waiting pool. This method must be
- * called, BEFORE the request is sent (to avoid a race between this thread and an incoming
- * reply).
- * This method shall only be called for synchronous requests.
- *
- * @param nDisposeId An ID, that uniquely identifies a bridge within the
- * local process. The pointer to the bridge object should be used.
- * @see uno_threadpool_disposeThreads
- ***/
-struct uno_threadpool_Handle * SAL_CALL
-uno_threadpool_createHandle( sal_Int64 nDisposeId ) SAL_THROW_EXTERN_C();
+ Makes the current thread known to the threadpool. This function must be
+ called, BEFORE uno_threadpool_enter() is called and BEFORE a job for this
+ thread is put into the threadpool (avoid a race between this thread and
+ an incoming request/reply).
+ For every call to uno_threadpool_attach, a corrosponding call to
+ uno_threadpool_detach must be done.
+
+ @param hPool The bridge threadpool handle previously created by uno_threadpool_create.
+
+*/
+void SAL_CALL
+uno_threadpool_attach( uno_ThreadPool hPool ) SAL_THROW_EXTERN_C();
/**
- * This method is called to wait for a reply of a previously sent request. This is a
- * blocking method.
- *
- * @param pHandle the handle that was previously created by uno_threadpool_createHandle.
- * @param ppThreadSpecificData [out] the pointer, that was given by uno_threadpool_reply.
- * If the threads for this bridge were disposed,
- * *ppThreadSpecificData is null.
+ This method is called to wait for a reply of a previously sent request. This is a
+ blocking method. uno_threadpool_attach() must have been called before.
+
+ @param hPool the handle that was previously created by uno_threadpool_create().
+ @param ppJob [out] the pointer, that was given by uno_threadpool_putJob
+ 0, when uno_threadpool_dispose was the reason to fall off from threadpool.
**/
void SAL_CALL
-uno_threadpool_enter( struct uno_threadpool_Handle * pHandle , void **ppThreadSpecificData )
+uno_threadpool_enter( uno_ThreadPool hPool , void **ppJob )
SAL_THROW_EXTERN_C();
-
/**
- * A request is put into a queue of waiting requests. This method is non-blocking.
- *
- * If the request is synchronous, it is first looked up,
- * if there exists a handle with the given
- * identifier. If this is the case, the thread is woken up and the doRequest
- * function is called with the given pThreadSpecificData. If no handle exists,
- * a new thread is created and the given threadId is bound to the new thread.
- *
- * If the request is asynchronous, it is put into the queue of asynchronous
- * requests for the current threadid. The requests are always executed in a new
- * thread, even if the thread with the given Id waiting in the pool. No Id is bound
- * to the newly created thread. The responsibilty is left to the bridge ( if it
- * wishes to bind a name).
- *
- * @param pThreadId The Id of thread, that initialized this request. (In general a
- * remote threadid).
- * @param pThreadSpecificData The argument, that doRequest will get.
- * @param doRequest The function, that shall be called to execute the request.
- * @param bIsOneway True, if the request is asynchrons. False, if it is synchronous
- *
- **/
+ Detaches the current thread from the threadpool. Must be called for
+ every call to uno_threadpool_attach.
+*/
void SAL_CALL
-uno_threadpool_putRequest( sal_Sequence *pThreadId,
- void *pThreadSpecificData,
- void ( SAL_CALL * doRequest ) ( void *pThreadSpecificData ),
- sal_Bool bIsOneway ) SAL_THROW_EXTERN_C();
-
+uno_threadpool_detach( uno_ThreadPool hPool ) SAL_THROW_EXTERN_C();
/**
- * A reply is put into the threadpool. There MUST be a thread with the given threadId waiting
- * for this reply. This method is non-blocking.
- *
- * @param pThreadSpecificData The pointer, that is returned by uno_threadpool_enter.
- **/
+ Puts a job into the pool. A job may eiter be a request or a reply
+ (replies have a 0 in the doRequest parameter). This function is non-blocking.
+
+ A request may either be synchronous or asynchronous.
+ If the request is synchronous, it is first looked up,
+ if there exists a handle with the given
+ identifier. If this is the case, the thread is woken up and the doRequest
+ function is called with the given pJob. If no handle exists,
+ a new thread is created and the given threadId is bound to the new thread.
+
+ If the request is asynchronous, it is put into the queue of asynchronous
+ requests for the current threadid. The requests are always executed in a new
+ thread, even if the thread with the given id is waiting in the pool. No id is bound
+ to the newly created thread. The responsibilty is left to the bridge ( if it
+ wishes to bind a name).
+
+ If pJob is a reply, there MUST be a thread with the given threadId waiting
+ for this reply.
+
+ @param pThreadId The Id of the thread, that initialized this request. (In general a
+ remote threadid).
+ @param pJob The argument, that doRequest will get or that will be returned by
+ uno_threadpool_enter().
+ @param doRequest The function, that shall be called to execute the request.
+ 0 if pJob is a reply.
+ @param bIsOneway True, if the request is asynchrons. False, if it is synchronous.
+ Set to sal_False, if pJob is a reply.
+ */
void SAL_CALL
-uno_threadpool_putReply( sal_Sequence *pThreadId, void *pThreadSpecificData ) SAL_THROW_EXTERN_C();
-
+uno_threadpool_putJob(
+ uno_ThreadPool hPool,
+ sal_Sequence *pThreadId,
+ void *pJob,
+ void ( SAL_CALL * doRequest ) ( void *pThreadSpecificData ),
+ sal_Bool bIsOneway ) SAL_THROW_EXTERN_C();
/**
- * All threads, that are waiting on handles, that were created with
- * nDisposeId, are forced out of the pool.
- * (@see uno_threadpool_createTicket) These threads will return from
- * uno_threadpool_enter with 0 == *ppThreadSpecificData.
- * Later calls to uno_threadpool_enter with the given disposeId also
- * return immeadiatly.
- *
- * @param nDisposeId Identfies the caller of uno_threadpool_createTicket
- *
- * This function is called i.e. by a bridge, that is forced to dispose itself.
- * When disposing of the bridge has finished, the bridge MUST call
- * uno_threadpool_stopDisposeThreads.
- **/
+ All threads, that are waiting on the hPool handle, are forced out of the pool.
+ The threads waiting with uno_threadpool_enter() will return with *ppJob == 0
+
+ Later calls to uno_threadpool_enter() using the hPool handle will also
+ return immeadiatly with *ppJob == 0.
+
+ @param hPool The handle to be disposed.
+ In case, hPool is 0, this function joins on all threads created
+ by the threadpool administration.
+
+ This function is called i.e. by a bridge, that is forced to dispose itself.
+ */
void SAL_CALL
-uno_threadpool_disposeThreads( sal_Int64 nDisposeId ) SAL_THROW_EXTERN_C();
+uno_threadpool_dispose( uno_ThreadPool hPool ) SAL_THROW_EXTERN_C();
-/**
- * Informs the threadpool, that no special treatment is needed for the given nDisposeId.
- * This allows the threadpool to release internal resources
- * and must be called after all threads originated from this bridge have returned.
- * (This can in general be done in the bridge destructor).
- *
- * @param nDisposeId Identifies the caller of uno_threadpool_createTicket
- * @see uno_threadpool_disposeThreads
- **/
+/** Releases the previously with uno_threadpool_create() created handle.
+ The handle thus becomes invalid. It is an error to use the handle after
+ uno_threadpool_destroy().
+ */
void SAL_CALL
-uno_threadpool_stopDisposeThreads( sal_Int64 nDisposeId ) SAL_THROW_EXTERN_C();
+uno_threadpool_destroy( uno_ThreadPool hPool ) SAL_THROW_EXTERN_C();
#ifdef __cplusplus
}