---
name: "qbutil.h"
section: "3"
platform: "linux"
package: "libqb"
version: "2.0.10-1"
release: "Arch Linux 2026-11-01"
platforms: ["linux"]
url: "https://new.carta.tech/qbutil.h"
---

# qbutil.h(3)

These are some convience functions used throughout libqb.

## NAME

qbutil.h - These are some convience functions used throughout libqb.

## SYNOPSIS

```
#include <qb/qbutil.h>
```

## DESCRIPTION

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

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);
```

## SEE ALSO

[*qb\_util\_nano\_current\_get*(3)](/qb_util_nano_current_get/3.md), [*qb\_util\_stopwatch\_stop*(3)](/qb_util_stopwatch_stop/3.md), [*qb\_util\_stopwatch\_split*(3)](/qb_util_stopwatch_split/3.md), [*qb\_util\_stopwatch\_split\_ctl*(3)](/qb_util_stopwatch_split_ctl/3.md), [*qb\_thread\_unlock*(3)](/qb_thread_unlock/3.md), [*qb\_strerror\_r*(3)](/qb_strerror_r/3.md), [*qb\_util\_stopwatch\_time\_split\_get*(3)](/qb_util_stopwatch_time_split_get/3.md), [*qb\_util\_set\_log\_function*(3)](/qb_util_set_log_function/3.md), [*qb\_util\_timespec\_from\_epoch\_get*(3)](/qb_util_timespec_from_epoch_get/3.md), [*qb\_thread\_lock\_destroy*(3)](/qb_thread_lock_destroy/3.md), [*qb\_thread\_trylock*(3)](/qb_thread_trylock/3.md), [*qb\_util\_nano\_monotonic\_hz*(3)](/qb_util_nano_monotonic_hz/3.md), [*qb\_util\_nano\_from\_epoch\_get*(3)](/qb_util_nano_from_epoch_get/3.md), [*qb\_util\_stopwatch\_create*(3)](/qb_util_stopwatch_create/3.md), [*qb\_util\_stopwatch\_split\_last*(3)](/qb_util_stopwatch_split_last/3.md), [*qb\_thread\_lock*(3)](/qb_thread_lock/3.md), [*qb\_util\_stopwatch\_free*(3)](/qb_util_stopwatch_free/3.md), [*qb\_thread\_lock\_create*(3)](/qb_thread_lock_create/3.md), [*qb\_timespec\_add\_ms*(3)](/qb_timespec_add_ms/3.md), [*qb\_util\_stopwatch\_start*(3)](/qb_util_stopwatch_start/3.md), [*qb\_util\_stopwatch\_us\_elapsed\_get*(3)](/qb_util_stopwatch_us_elapsed_get/3.md), [*qb\_util\_stopwatch\_sec\_elapsed\_get*(3)](/qb_util_stopwatch_sec_elapsed_get/3.md)

## COPYRIGHT

Copyright (C) 2010-2020 Red Hat, Inc.
