Timers in C
Here’s the translated code and explanation in C, formatted in Markdown suitable for Hugo:
Our first program will demonstrate the use of timers in C. We’ll use the time.h
library to handle time-related operations.
#include <stdio.h>
#include <time.h>
#include <unistd.h>
int main() {
// Timers in C are typically implemented using time_t and clock_t types
// from the time.h library. We'll use sleep() to simulate timer behavior.
// This "timer" will wait for 2 seconds
printf("Timer 1 started\n");
sleep(2);
printf("Timer 1 fired\n");
// For the second timer, we'll use a separate thread to demonstrate
// cancellation. In C, we'd typically use pthreads for this, but
// for simplicity, we'll just use a flag.
time_t start_time = time(NULL);
int timer_cancelled = 0;
printf("Timer 2 started\n");
// Simulate timer cancellation after 0.5 seconds
sleep(0.5);
timer_cancelled = 1;
if (timer_cancelled) {
printf("Timer 2 stopped\n");
} else {
sleep(1.5); // Rest of the 2-second period
printf("Timer 2 fired\n");
}
// Give enough time to show Timer 2 was indeed stopped
sleep(2);
return 0;
}
To compile and run the program:
$ gcc timers.c -o timers
$ ./timers
Timer 1 started
Timer 1 fired
Timer 2 started
Timer 2 stopped
In this C implementation:
We use
sleep()
function to simulate timer behavior. This function pauses the execution of the program for a specified number of seconds.For the first timer, we simply call
sleep(2)
to wait for 2 seconds before printing the “Timer 1 fired” message.For the second timer, we use a flag
timer_cancelled
to simulate timer cancellation. In a real-world scenario, you might use more sophisticated methods like pthreads for true concurrency.We use
time()
function to get the current time, which could be used to calculate elapsed time in a more complex implementation.The
sleep(2)
at the end ensures we wait long enough to demonstrate that Timer 2 was indeed stopped and didn’t fire.
This example demonstrates basic timer-like behavior in C. For more precise timing or advanced timer functionality, you might need to use platform-specific APIs or additional libraries.