Периодическое выполнение определенного кода в программе с задержкой - C (СИ)

Формулировка задачи:

Кто подскажет, возможно ли создать программу, которая с определённой частотой (скажем, раз в секунду) делает что-то простое (скажем, добавляет строку в файл), чтобы выполнялись следующие условия:
  • Программа консольная, для Windows
  • На чистом Си, не C++
  • Чтобы задержкой не тормозила другие задачи
Я пробовал через SetTimer(), но не работает (нужная функция не вызывается), а в некоторых местах пишут, что в консольных программах SetTimer() использовать нельзя.

Код к задаче: «Периодическое выполнение определенного кода в программе с задержкой - 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;
}

11   голосов, оценка 4.273 из 5


СОХРАНИТЬ ССЫЛКУ