Периодическое выполнение определенного кода в программе с задержкой - C (СИ)
Формулировка задачи:
Кто подскажет, возможно ли создать программу, которая с определённой частотой (скажем, раз в секунду) делает что-то простое (скажем, добавляет строку в файл), чтобы выполнялись следующие условия:
- Программа консольная, для Windows
- На чистом Си, не C++
- Чтобы задержкой не тормозила другие задачи
Решение задачи: «Периодическое выполнение определенного кода в программе с задержкой»
textual
Листинг программы
#include <time.h> #include <stdio.h> #include <threads.h> int __cdecl timerproc(void *arg) { struct timespec duration = {.tv_sec = 1, .tv_nsec = 0}; while(1) { printf("%s\n", (char*)arg); if(thrd_sleep(&duration, NULL) != thrd_success) printf("\tInterrupted!\n"); } return 0; } int main(void) { volatile int i = 0; char text[20]; thrd_t proc; struct timespec duration = {.tv_sec = 0, .tv_nsec = 5000000000L}; sprintf(text, "Time: %d", i++); thrd_create(&proc, timerproc, text); while(1) { thrd_sleep(&duration, NULL); sprintf(text, "Time: %d", i++); } return 0; }
Объяснение кода листинга программы
- Подключение необходимых библиотек для работы со временем, файловым вводом-выводом и потоками.
- Определение функции обратного вызова timerproc, которая будет вызываться по таймеру. Функция получает указатель на аргумент, представленный в виде строки, и выводит его на экран. Внутри цикла while функция ждет указанное время до следующего вызова.
- Создание переменной-флага i для отслеживания времени в функции main.
- Создание массива символов text для хранения строки
Time:
с добавлением значения i. - Создание нового потока timerproc с передачей в него аргумента text.
- В бесконечном цикле в функции main с задержкой в 5 секунд происходит обновление значения i и, соответственно, строки text.
- Возврат 0 из функции main, что означает успешный запуск программы.
ИИ поможет Вам:
- решить любую задачу по программированию
- объяснить код
- расставить комментарии в коде
- и т.д