qbutil.h(3) | libqb | qbutil.h(3) |
qbutil.h - These are some convience functions used throughout libqb.
#include <pthread.h>
#include <stdint.h>
#include <unistd.h>
#include <qb/qbdefs.h>
struct qb_version
Structured library versioning info.
#define QB_UTIL_SW_OVERWRITE 0x01
typedef struct qb_thread_lock_s qb_thread_lock_t
typedef void(* qb_util_log_fn_t) (const char *file_name, int32_t
file_line, int32_t severity, const char *msg)
typedef struct qb_util_stopwatch qb_util_stopwatch_t
enum qb_thread_lock_type_t { QB_THREAD_LOCK_SHORT,
QB_THREAD_LOCK_LONG } QB_THREAD_LOCK_SHORT is a short term lock
(spinlock if available on your system) QB_THREAD_LOCK_LONG is a mutex.
"
qb_thread_lock_t * qb_thread_lock_create
(qb_thread_lock_type_t type)
Create a new lock of the given type. int32_t qb_thread_lock
(qb_thread_lock_t *tl)
Calls either pthread_mutex_lock() or pthread_spin_lock(). int32_t
qb_thread_trylock (qb_thread_lock_t *tl)
Calls either pthread_mutex_trylock() or pthread_spin_trylock(). int32_t
qb_thread_unlock (qb_thread_lock_t *tl)
Calls either pthread_mutex_unlock() or pthread_spin_unlock. int32_t
qb_thread_lock_destroy (qb_thread_lock_t *tl)
Calls either pthread_mutex_destro() or pthread_spin_destroy(). void
qb_util_set_log_function (qb_util_log_fn_t fn)
QB_GNUC_DEPRECATED
Use this function to output libqb internal log message as you wish. void
qb_timespec_add_ms (struct timespec *ts, int32_t ms)
Add milliseconds onto the timespec. uint64_t qb_util_nano_current_get
(void)
Get the current number of nano secounds produced by the systems incrementing
clock (CLOCK_MONOTOMIC if available). uint64_t
qb_util_nano_monotonic_hz (void)
Get the frequence of the clock used in qb_util_nano_current_get().
uint64_t qb_util_nano_from_epoch_get (void)
Get the time in nano seconds since epoch. void
qb_util_timespec_from_epoch_get (struct timespec *ts)
Get the time in timespec since epoch. char * qb_strerror_r (int errnum,
char *buf, size_t buflen)
strerror_r replacement. qb_util_stopwatch_t *
qb_util_stopwatch_create (void)
Create a Stopwatch (to time operations) void qb_util_stopwatch_free
(qb_util_stopwatch_t *sw)
Free the stopwatch. void qb_util_stopwatch_start
(qb_util_stopwatch_t *sw)
Start the stopwatch. void qb_util_stopwatch_stop
(qb_util_stopwatch_t *sw)
Stop the stopwatch. uint64_t qb_util_stopwatch_us_elapsed_get
(qb_util_stopwatch_t *sw)
Get the elapsed time in micro seconds. float
qb_util_stopwatch_sec_elapsed_get (qb_util_stopwatch_t *sw)
Get the elapsed time in seconds. int32_t qb_util_stopwatch_split_ctl
(qb_util_stopwatch_t *sw, uint32_t max_splits, uint32_t options)
uint64_t qb_util_stopwatch_split (qb_util_stopwatch_t *sw)
Create a new time split (or lap time) uint32_t
qb_util_stopwatch_split_last (qb_util_stopwatch_t *sw)
Get the last split index to be used by
qb_util_stopwatch_time_split_get() uint64_t
qb_util_stopwatch_time_split_get (qb_util_stopwatch_t *sw,
uint32_t receint, uint32_t older)
Read the time split (in us) from 'receint' to 'older'.
const struct qb_version qb_ver
const char *const qb_ver_str
Complete library versioning info as a string.
These are some convience functions used throughout libqb.
Author:
Locking
Time functions
Basic Stopwatch
uint64_t elapsed1; uint64_t elapsed2; qb_util_stopwatch_t *sw = qb_util_stopwatch_create(); qb_util_stopwatch_start(sw); usleep(sometime); qb_util_stopwatch_stop(sw); elapsed1 = qb_util_stopwatch_us_elapsed_get(sw); usleep(somemoretime); qb_util_stopwatch_stop(sw); elapsed2 = qb_util_stopwatch_us_elapsed_get(sw); qb_util_stopwatch_free(sw);
Stopwatch with splits
uint64_t split; qb_util_stopwatch_t *sw = qb_util_stopwatch_create(); qb_util_stopwatch_split_ctl(sw, 3, 0); qb_util_stopwatch_start(sw); usleep(sometime); qb_util_stopwatch_split(sw); usleep(somemoretime); qb_util_stopwatch_split(sw); usleep(somemoretime); qb_util_stopwatch_split(sw); idx = qb_util_stopwatch_split_last(sw); do {
split = qb_util_stopwatch_time_split_get(sw, idx, idx);
qb_log(LOG_INFO, "split %d is %"PRIu64"", last, split);
idx--; } while (split > 0); split = qb_util_stopwatch_time_split_get(sw, 2, 1); qb_log(LOG_INFO, "time between second and third split is %"PRIu64"", split); qb_util_stopwatch_free(sw);
QB_THREAD_LOCK_SHORT is a short term lock (spinlock if available on your system) QB_THREAD_LOCK_LONG is a mutex.
Enumerator
strerror_r replacement.
Calls either pthread_mutex_lock() or pthread_spin_lock().
Create a new lock of the given type.
Parameters:
Returns:
Calls either pthread_mutex_destro() or pthread_spin_destroy().
Calls either pthread_mutex_trylock() or pthread_spin_trylock().
Calls either pthread_mutex_unlock() or pthread_spin_unlock.
Add milliseconds onto the timespec.
Parameters:
Get the current number of nano secounds produced by the systems incrementing clock (CLOCK_MONOTOMIC if available).
Get the time in nano seconds since epoch.
Get the frequence of the clock used in qb_util_nano_current_get().
Use this function to output libqb internal log message as you wish.
Create a Stopwatch (to time operations)
Free the stopwatch.
Get the elapsed time in seconds. (it must have been started and stopped).
Create a new time split (or lap time)
Parameters:
Return values:
Parameters:
Return values:
Get the last split index to be used by qb_util_stopwatch_time_split_get()
Note:
Parameters:
Returns:
Start the stopwatch. This also acts as a reset. Essentially it sets the starting time and clears the splits.
Stop the stopwatch. This just allows you to get the elapsed time. So you can call this multiple times. Do not call qb_util_stopwatch_start() unless you want to reset the stopwatch.
Read the time split (in us) from 'receint' to 'older'. If older == receint then the cumulated split will be returned (from the stopwatch start).
Parameters:
Return values:
Get the elapsed time in micro seconds. (it must have been started and stopped).
Get the time in timespec since epoch.
Parameters:
Returns:
Complete library versioning info as a string.
Generated automatically by Doxygen for libqb from the source code.
Fri Apr 26 2019 | Version 1.0.5 |