この記事では、C言語でプログラムを1秒ごとに処理する方法を紹介します。
sleep関数
、タイマー、マルチスレッドの3つの方法を解説します。
初心者の方でもわかりやすく、具体的なサンプルコードを交えて説明します。
1秒ごとに処理する方法
プログラムを1秒ごとに処理する方法には、いくつかの方法があります。
以下では、3つの方法を紹介します。
方法1: sleep関数を使用する
まず、最も簡単な方法として、sleep関数
を使用する方法があります。
sleep関数
は、指定した時間だけプログラムの実行を一時停止することができます。
以下は、1秒ごとにメッセージを表示するプログラムの例です。
#include <stdio.h>
#include <unistd.h>
int main() {
int i;
for (i = 0; i < 10; i++) {
printf("処理中...\n");
sleep(1); // 1秒待つ
}
return 0;
}
このプログラムでは、forループを使用して10回繰り返し処理を行い、処理中のメッセージを表示しています。
そして、sleep関数
を使用して1秒待っています。
実行結果は以下のようになります。
処理中...
処理中...
処理中...
...
方法2: タイマーを使用する
次に、タイマーを使用する方法です。
タイマーを使用することで、指定した時間ごとに関数を実行することができます。
以下は、1秒ごとにメッセージを表示するプログラムの例です。
#include <stdio.h>
#include <signal.h>
#include <unistd.h>
void timer_handler(int signum) {
printf("処理中...\n");
}
int main() {
struct sigaction sa;
struct itimerval timer;
// タイマーハンドラの設定
sa.sa_handler = timer_handler;
sigemptyset(&sa.sa_mask);
sa.sa_flags = 0;
sigaction(SIGALRM, &sa, NULL);
// タイマーの設定
timer.it_value.tv_sec = 1; // 最初の実行までの時間(秒)
timer.it_value.tv_usec = 0; // 最初の実行までの時間(マイクロ秒)
timer.it_interval.tv_sec = 1; // 繰り返し実行する間隔(秒)
timer.it_interval.tv_usec = 0; // 繰り返し実行する間隔(マイクロ秒)
// タイマーの開始
setitimer(ITIMER_REAL, &timer, NULL);
while (1) {
// プログラムを継続するために無限ループ
}
return 0;
}
このプログラムでは、タイマーハンドラとしてtimer_handler関数
を定義し、その中で処理中のメッセージを表示しています。
そして、sigaction関数
を使用してSIGALRMシグナル(タイマーのシグナル)を受け取った時にtimer_handler関数
を実行するように設定しています。
また、setitimer関数
を使用してタイマーを設定し、ITIMER_REALオプションを指定して実行します。
方法3: マルチスレッドを使用する
最後に、マルチスレッドを使用する方法です。
マルチスレッドを使用することで、複数の処理を同時に実行することができます。
以下は、1秒ごとにメッセージを表示するプログラムの例です。
#include <stdio.h>
#include <pthread.h>
void* thread_function(void* arg) {
while (1) {
printf("処理中...\n");
sleep(1);
}
return NULL;
}
int main() {
pthread_t thread;
// スレッドの作成
pthread_create(&thread, NULL, thread_function, NULL);
while (1) {
// プログラムを継続するために無限ループ
}
return 0;
}
このプログラムでは、pthread_create関数
を使用して新しいスレッドを作成し、その中で処理中のメッセージを表示しています。
そして、sleep関数
を使用して1秒待っています。
メインスレッドと新しいスレッドが同時に実行されるため、1秒ごとにメッセージが表示されます。
以上が、プログラムを1秒ごとに処理する方法の3つの方法です。
それぞれの方法には特徴がありますので、目的や要件に合わせて適切な方法を選択してください。