Есть ли аналог библиотеки chrono в C?

143
04 января 2021, 12:20

Есть ли какая нибудь замена, либо аналогия временной C++ библиотеки chrono (в ходящей в пространство имен std) в C ??

Пытаюсь заменить C++ код на C код.

Пытаюсь работать с микросекундами.

Answer 1

Да @Alexey Nikolaev вы полностью правы. НО хотел бы раскрыть вопрос. По сути за время в миллисекундах отвечает не библиотека, а сама операционная система. Что бы узнать микросекунды надо опросить её АПИ в Windows это WinApi, в Линуксе (Ubuntu) это POSIX.

Для работы с микросекундами в линусе стоит "работать" через функции : gettimeofday и clock_gettime

Для работы с микросекундами в windows стоит "работать" через функцию : GetProcessTimes

Вот пример работы с микросекундами в лунуксе (Ubuntu) :

#include <stdio.h>
#include <stdint.h>
#include <sys/time.h> // первый вариант gettimeofday
#include <time.h>   // второй вариант clock_gettime
int main()
{
    struct timeval stop, start;
    gettimeofday(&start, NULL);
    struct timespec start1, stop1;
    clock_gettime(CLOCK_MONOTONIC_RAW, &start1); // можно такCLOCK_MONOTONIC_RAW и так можно CLOCK_REALTIME
    printf("Hello World!\n");
    int a = 1000;
    for (int i =0; i<a;i++)
        printf("%d \n",i);
    gettimeofday(&stop, NULL);
    printf("took %lu\n", stop.tv_usec - start.tv_usec);
     printf("------------------ \n");
     clock_gettime(CLOCK_MONOTONIC_RAW, &stop1); // можно такCLOCK_MONOTONIC_RAW и так можно CLOCK_REALTIME
     uint64_t delta_us = (stop1.tv_sec - start1.tv_sec) * 1000000 + (stop1.tv_nsec - start1.tv_nsec) / 1000;
     printf("delta_us =  %d \n", delta_us);
    return 0;
}

Увы в винде я пример предоставить не могу :( ибо в ней пока не работаю (даже если бы работал то попробовал реализовать через Qt).

Answer 2

В Си библиотека работы со временем находится в time.h

READ ALSO
Сравнение индексов в stl &lt;vector&gt;

Сравнение индексов в stl <vector>

Мне нужно от минимального элемента вектора до максимального поменять знаки элементов на противоположные

83
c++: нулевое значение std::chrono::time_point&lt;std::chrono::system_clock&gt;

c++: нулевое значение std::chrono::time_point<std::chrono::system_clock>

Подскажите как можно выставить пустое/нулевое значение для типа

125
Как подключить llvm к проекту visual studio 2017?

Как подключить llvm к проекту visual studio 2017?

Выходят ошибки вроде "class "llvm::Attribute" не содержит члена "ArgMemOnly", "не удаётся открыть источник файл llvm/IR/Intrinsicsgen" и похожие

123