/
memset
/
synchron_data_streams
Обзор
Документация
Войти
/
memset
/
synchron_data_streams
Код
Запросы
0
Задачи
Вики
Пакеты
0
Релизы
0
CI/CD
Аналитика
Безопасность
master
event_sync.h
98 строк
2 KB
petrova_ms
Добавление файлов в репозиторий
02 июн 2026, 21:05
02 июн 2026, 21:05
b4818d2
Код
Авторство
О чём код?
/** @mainpage @file Заголовочный файл event_sync.h @author Петрова М.С. @version @date @note Описан класс EventSync - класс синхронизирующий события с помощью семафора */ #ifndef EVENT_SYNC_H #define EVENT_SYNC_H #include <semaphore.h> #include <errno.h> #include <cstring> #include "../common/status.h" /** @class EventSync */ class EventSync { private: sem_t sem_event; ///< семафор status_obj_st status; public: /// Конструктор - создает семафор EventSync() { errno = 0; status.status = sem_init(&sem_event, 0, 0); status.status_errno = errno; } /// Деструктор - разрушает семафор ~EventSync() { if(!status.status) sem_destroy(&sem_event); } status_obj_st get_status() { return status; } /// Метод, содержит функцию ожидания разблокировки семафора int wait_event_time(struct timespec * time_wait_sem) { struct timespec time_wait, buff_time; clock_gettime(CLOCK_REALTIME, &time_wait); time_wait.tv_sec += time_wait_sem->tv_sec; time_wait.tv_nsec += time_wait_sem->tv_nsec; if(time_wait.tv_nsec >= 1000000000) { buff_time.tv_sec = time_wait.tv_nsec / 1000000000; time_wait.tv_sec += buff_time.tv_sec; time_wait.tv_nsec -= buff_time.tv_sec * 1000000000; } unsigned err = 0; errno = 0; int ret_sem = sem_timedwait(&sem_event, &time_wait); printf("\n TEMP: sem_timedwait = %s \n\n", strerror(errno)); err = errno; if(ret_sem < 0) ret_sem = err; else ret_sem = 0; return ret_sem; } int wait_event() { unsigned err = 0; errno = 0; int ret_sem = sem_wait(&sem_event); printf("\n TEMP: sem_time = %s \n\n", strerror(errno)); err = errno; if(ret_sem < 0) ret_sem = err; return ret_sem; } /// Метод, содержит функцию освобождения семафора int reset_event() { unsigned err = 0; errno = 0; int ret = sem_post(&sem_event); err = errno; if(ret < 0) ret = err; return ret; } }; #endif // EVENT_SYNC_H