qbutil.h(3) | libqb | qbutil.h(3) |
NAME¶
qbutil.h -
SYNOPSIS¶
#include <pthread.h>
#include <stdint.h>
#include <unistd.h>
#include <qb/qbdefs.h>
Defines¶
#define QB_UTIL_SW_OVERWRITE 0x01
Typedefs¶
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
Enumerations¶
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.
Functions¶
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'.
Detailed Description¶
Author:
These are some convience functions used throughout libqb.
Locking.RS 4
- qb_thread_lock_create()
- qb_thread_lock()
- qb_thread_trylock()
- qb_thread_unlock()
- qb_thread_lock_destroy()
Time functions.RS 4
- qb_timespec_add_ms()
- qb_util_nano_current_get()
- qb_util_nano_monotonic_hz()
- qb_util_nano_from_epoch_get()
- qb_util_timespec_from_epoch_get()
Basic Stopwatch.RS 4
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.RS 4 Setup a stopwatch with space for
3 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);
Define Documentation¶
#define QB_UTIL_SW_OVERWRITE 0x01¶
Typedef Documentation¶
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¶
Enumeration Type Documentation¶
enum qb_thread_lock_type_t¶
QB_THREAD_LOCK_SHORT is a short term lock (spinlock if available on your system) QB_THREAD_LOCK_LONG is a mutex.
Enumerator:
Function Documentation¶
char* qb_strerror_r (int errnum, char * buf, size_t buflen)¶
strerror_r replacement.
int32_t qb_thread_lock (qb_thread_lock_t * tl)¶
Calls either pthread_mutex_lock() or pthread_spin_lock().
qb_thread_lock_t* qb_thread_lock_create (qb_thread_lock_type_t type)¶
Create a new lock of the given type. Parameters:
Returns:
int32_t qb_thread_lock_destroy (qb_thread_lock_t * tl)¶
Calls either pthread_mutex_destro() or pthread_spin_destroy().
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.
void qb_timespec_add_ms (struct timespec * ts, int32_t ms)¶
Add milliseconds onto the timespec. Parameters:
ms the amount of milliseconds to increment ts
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_from_epoch_get (void)¶
Get the time in nano seconds since epoch.
uint64_t qb_util_nano_monotonic_hz (void)¶
Get the frequence of the clock used in qb_util_nano_current_get().
void qb_util_set_log_function (qb_util_log_fn_t fn)¶
Use this function to output libqb internal log message as you wish.
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.
float qb_util_stopwatch_sec_elapsed_get (qb_util_stopwatch_t * sw)¶
Get the elapsed time in seconds. (it must have been started and stopped).
uint64_t qb_util_stopwatch_split (qb_util_stopwatch_t * sw)¶
Create a new time split (or lap time). Parameters:
Return values:
0 if no more splits available
int32_t qb_util_stopwatch_split_ctl (qb_util_stopwatch_t * sw, uint32_t max_splits, uint32_t options) Parameters:¶
max_splits maximum number of time splits
options (0 or QB_UTIL_SW_OVERWRITE )
Return values:
-errno on failure
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(). Note:
Parameters:
Returns:
void qb_util_stopwatch_start (qb_util_stopwatch_t * sw)¶
Start the stopwatch. This also acts as a reset. Essentially it sets the starting time and clears the splits.
void qb_util_stopwatch_stop (qb_util_stopwatch_t * sw)¶
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.
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'. If older == receint then the cumulated split will be returned (from the stopwatch start).
Parameters:
receint split
older split
Return values:
0 if not a valid split
uint64_t qb_util_stopwatch_us_elapsed_get (qb_util_stopwatch_t * sw)¶
Get the elapsed time in micro seconds. (it must have been started and stopped).
void qb_util_timespec_from_epoch_get (struct timespec * ts)¶
Get the time in timespec since epoch. Parameters:
Returns:
Author¶
Generated automatically by Doxygen for libqb from the source code.
10 May 2016 | Version 0.17.1 |