![]()  | 
  
    Qore Programming Language 2.3.0
    
   | 
 
#include <cstdio>#include <pthread.h>#include <functional>Go to the source code of this file.
Classes | |
| hashdecl | q_user_tld | 
| data structure for user thread-local data  More... | |
| class | QoreForeignThreadHelper | 
| use this class to temporarily register and deregister a foreign thread to allow Qore code to be executed and the Qore library to be used from threads not created by the Qore library  More... | |
| class | ThreadCleanupList | 
| list of functions to be run when a thread ends; required for some external libraries that require explicit cleanup when a thread terminates  More... | |
Macros | |
| #define | QFT_ERROR -1 | 
| error when calling q_register_foreign_thread()  | |
| #define | QFT_OK 0 | 
| OK response when calling q_register_foreign_thread()  | |
| #define | QFT_REGISTERED -2 | 
| thread already registered when calling q_register_foreign_thread()  | |
Typedefs | |
| typedef void(* | q_thread_t) (ExceptionSink *xsink, void *arg) | 
| pointer to a function that can be started with q_start_thread()  | |
| typedef void(* | qtdest_t) (void *) | 
| pointer to a qore thread destructor function  | |
| typedef void(* | qtrdest_t) (void *, ExceptionSink *) | 
| pointer to a qore thread resource destructor function  | |
Functions | |
| DLLEXPORT bool | check_thread_resource (AbstractThreadResource *atr) | 
| check if a thread resouce has been saved   | |
| DLLEXPORT const AbstractQoreZoneInfo * | currentTZ () | 
| returns the current local time zone, note that if 0 = UTC  | |
| DLLEXPORT QoreProgram * | getProgram () | 
| returns the current QoreProgram  | |
| DLLEXPORT bool | is_valid_qore_thread () | 
| returns true if the current thread is a valid qore thread; it is not safe to call most Qore functions unless the thread is registered with Qore   | |
| DLLEXPORT int | q_deregister_foreign_thread () | 
| deregisters the current thread as a foreign thread   | |
| DLLEXPORT int | q_deregister_reserved_foreign_thread () | 
| deregisters a foreign qore thread but retains the TID as reserved   | |
| DLLEXPORT void * | q_get_thread_local_data (int key) | 
| returns thread-local data   | |
| DLLEXPORT q_user_tld * | q_get_thread_local_data_all (int key) | 
| returns thread-local data   | |
| DLLEXPORT int | q_get_unique_thread_local_data_key () | 
| returns a unique ID to use with thread_local_data APIs   | |
| DLLEXPORT int | q_gettid () noexcept | 
| returns the current TID number   | |
| DLLEXPORT int | q_register_foreign_thread () | 
| registers the current thread as a Qore thread   | |
| DLLEXPORT int | q_register_reserved_foreign_thread (int tid) | 
| registers a foreign qore thread as a Qore thread with a reserved TID   | |
| DLLEXPORT int | q_release_reserved_foreign_thread_id (int tid) | 
| releases a TID reserved with q_reserve_foreign_thread_id()   | |
| DLLEXPORT int | q_remove_thread_local_data (int key, q_user_tld &data, bool run_destructor=true) | 
| returns and removes thread-local data   | |
| DLLEXPORT int | q_reserve_foreign_thread_id () | 
| reserves a thread ID for later registration and returns the TID reserved; use q_release_reserved_foreign_thread_id() to release the reservation   | |
| DLLEXPORT void | q_save_thread_local_data (int key, void *data, q_thread_local_destructor destructor=nullptr) | 
| saves thread-local data   | |
| int | q_start_thread (ExceptionSink *xsink, q_thread_t f, void *arg=nullptr) | 
| starts a new thread with the given arguments, when the thread terminates, it deregisters itself   | |
| DLLEXPORT void * | q_swap_thread_local_data (int key, void *new_data, q_thread_local_destructor destructor=nullptr, bool run_destructor=true) | 
| swaps thread-local data   | |
| DLLEXPORT QoreHashNode * | qore_get_parent_caller_location (size_t offset=1) | 
| Returns a CallStackInfo hash for the caller's location, if available, otherwise returns nullptr.   | |
| DLLEXPORT q_trid_t | qore_get_trid () | 
| get a thread resource ID  | |
| DLLEXPORT int | remove_thread_resource (AbstractThreadResource *atr) | 
| remove the resource from the thread resource list for the current thread   | |
| DLLEXPORT int | remove_thread_resource (const ResolvedCallReferenceNode *rcr, ExceptionSink *xsink) | 
| remove the callable resource from the thread resource list for the current thread   | |
| DLLEXPORT void | set_thread_resource (AbstractThreadResource *atr) | 
| save a resource against a thread for thread resource handling   | |
| DLLEXPORT void | set_thread_resource (const ResolvedCallReferenceNode *rcr, const QoreValue arg) | 
| save a callable resource against a thread for thread resource handling   | |
Variables | |
| DLLEXPORT ThreadCleanupList | tclist | 
| the interface to the thread cleanup list  | |
Provides definitions relative to threading in Qore.
| DLLEXPORT bool check_thread_resource | ( | AbstractThreadResource * | atr | ) | 
check if a thread resouce has been saved
| atr | thread resource id to check | 
| DLLEXPORT bool is_valid_qore_thread | ( | ) | 
returns true if the current thread is a valid qore thread; it is not safe to call most Qore functions unless the thread is registered with Qore
| DLLEXPORT int q_deregister_foreign_thread | ( | ) | 
deregisters the current thread as a foreign thread
| DLLEXPORT int q_deregister_reserved_foreign_thread | ( | ) | 
deregisters a foreign qore thread but retains the TID as reserved
| DLLEXPORT void * q_get_thread_local_data | ( | int | key | ) | 
returns thread-local data
| DLLEXPORT q_user_tld * q_get_thread_local_data_all | ( | int | key | ) | 
returns thread-local data
| key | the key used to save the data | 
| DLLEXPORT int q_get_unique_thread_local_data_key | ( | ) | 
returns a unique ID to use with thread_local_data APIs
      
  | 
  noexcept | 
returns the current TID number
Referenced by StreamBase::check(), StreamBase::reassignThread(), QoreRWLock::trywrlock(), StreamBase::unassignThread(), and QoreRWLock::wrlock().
| DLLEXPORT int q_register_foreign_thread | ( | ) | 
registers the current thread as a Qore thread
call q_deregister_foreign_thread() when Qore functionality is no longer required; not calling q_deregister_foreign_thread() will cause a memory leak
| DLLEXPORT int q_register_reserved_foreign_thread | ( | int | tid | ) | 
registers a foreign qore thread as a Qore thread with a reserved TID
| tid | the TID reserved with q_reserve_foreign_thread_id() | 
| DLLEXPORT int q_release_reserved_foreign_thread_id | ( | int | tid | ) | 
releases a TID reserved with q_reserve_foreign_thread_id()
| tid | the TID reserved with q_reserve_foreign_thread_id() | 
| DLLEXPORT int q_remove_thread_local_data | ( | int | key, | 
| q_user_tld & | data, | ||
| bool | run_destructor = true  | 
        ||
| ) | 
returns and removes thread-local data
| key | the key used to save the data | 
| data | the data structure, if found (output variable) | 
| run_destructor | if true then the destructor is run when the data is removed; if false, it is not | 
| DLLEXPORT int q_reserve_foreign_thread_id | ( | ) | 
reserves a thread ID for later registration and returns the TID reserved; use q_release_reserved_foreign_thread_id() to release the reservation
| DLLEXPORT void q_save_thread_local_data | ( | int | key, | 
| void * | data, | ||
| q_thread_local_destructor | destructor = nullptr  | 
        ||
| ) | 
saves thread-local data
can only be called in a registered Qore thread
| int q_start_thread | ( | ExceptionSink * | xsink, | 
| q_thread_t | f, | ||
| void * | arg = nullptr  | 
        ||
| ) | 
starts a new thread with the given arguments, when the thread terminates, it deregisters itself
| arg | the argument to the function | 
| f | the function to start in the new thread | 
| xsink | any errors starting the new thread will be raised here and cause -1 to be returned | 
| DLLEXPORT void * q_swap_thread_local_data | ( | int | key, | 
| void * | new_data, | ||
| q_thread_local_destructor | destructor = nullptr,  | 
        ||
| bool | run_destructor = true  | 
        ||
| ) | 
swaps thread-local data
can only be called in a registered Qore thread
| DLLEXPORT QoreHashNode * qore_get_parent_caller_location | ( | size_t | offset = 1 | ) | 
Returns a CallStackInfo hash for the caller's location, if available, otherwise returns nullptr.
| offset | the call stack entry offset | 
| DLLEXPORT int remove_thread_resource | ( | AbstractThreadResource * | atr | ) | 
remove the resource from the thread resource list for the current thread
| atr | a pointer to the thread resource to remove | 
| DLLEXPORT int remove_thread_resource | ( | const ResolvedCallReferenceNode * | rcr, | 
| ExceptionSink * | xsink | ||
| ) | 
remove the callable resource from the thread resource list for the current thread
| rcr | a pointer to the thread resource to remove | 
| xsink | any Qore-language exceptions raised when dereferencing the callable object will be saved here | 
| DLLEXPORT void set_thread_resource | ( | AbstractThreadResource * | atr | ) | 
save a resource against a thread for thread resource handling
| atr | a pointer to the thread resource to save | 
| DLLEXPORT void set_thread_resource | ( | const ResolvedCallReferenceNode * | rcr, | 
| const QoreValue | arg | ||
| ) | 
save a callable resource against a thread for thread resource handling
| rcr | a pointer to a callable node for thread resource handling | 
| arg | an argument to use when calling the thread resource handler |