Методы добавления задержек в программировании на C для Windows

В программировании на C для Windows существует несколько методов введения задержек в код. Вот некоторые из часто используемых методов:

  1. Функция сна. Функция сна — это функция Windows API, которая приостанавливает выполнение программы на определенное количество миллисекунд. Это позволяет вам ввести задержку в ваш код, вызвав функцию с желаемым значением задержки.

Пример:

#include <windows.h>
int main() {
    // Delay for 1 second (1000 milliseconds)
    Sleep(1000);
    return 0;
}
  1. Цикл ожидания занятости: вы можете создать цикл, который периодически не выполняет никакой полезной работы, по сути тратя циклы ЦП, в течение определенной продолжительности, чтобы ввести задержку.

Пример:

#include <time.h>
void delay(int milliseconds) {
    clock_t start_time = clock();
    while ((clock() - start_time) < milliseconds);
}
int main() {
    // Delay for 1 second (1000 milliseconds)
    delay(1000);
    return 0;
}
  1. Задержка по времени: вы можете использовать заголовочный файл time.h, чтобы ввести задержку, основанную на текущем системном времени. Этот метод позволяет более точно контролировать время.

Пример:

#include <time.h>
void delay(int milliseconds) {
    time_t start_time = time(NULL);
    while ((time(NULL) - start_time) * 1000 < milliseconds);
}
int main() {
    // Delay for 1 second (1000 milliseconds)
    delay(1000);
    return 0;
}
  1. Мультимедийный таймер. Мультимедийный таймер, предоставляемый Windows API, обеспечивает синхронизацию с высоким разрешением и точные задержки. Вы можете использовать функцию timeSetEvent, чтобы настроить обратный вызов таймера для желаемой задержки.

Пример:

#include <windows.h>
#include <mmsystem.h>
void CALLBACK TimerCallback(UINT uTimerID, UINT uMsg, DWORD_PTR dwUser, DWORD_PTR dw1, DWORD_PTR dw2) {
    // Timer callback function
}
int main() {
    // Delay for 1 second (1000 milliseconds) using multimedia timer
    timeSetEvent(1000, 0, TimerCallback, 0, TIME_ONESHOT);
    Sleep(2000); // Keep the program running to allow timer execution
    return 0;
}