【掲示板ご利用上の注意】

 ※題名は具体的に!
 ※学校の課題の丸投げ禁止!
 ※ソースの添付は「HTML変換ツール」で字下げ!
 ※返信の引用は最小限に!
 ※環境(OSとコンパイラ)や症状は具体的に詳しく!
 ※返信付き投稿の削除は禁止!
 ※マルチポスト(多重投稿)は慎んで!

 詳しくはこちら


本当はこんなに大きく書きたくはないのですが、なかなか守っていただけなくて…。
 守ってくださいね。お願いします。(by管理人)

C言語ソース⇒HTML形式ツール掲示板2こちら


管理者用メニュー    ツリーに戻る    携帯用URL    ホームページ    ログ    タグ一覧

No.23434

while文の時間制御の繰り返し
投稿者---サイ(2005/10/01 02:43:48)


はじめまして、サイと申します。
色々ネットで検索したのですが、見つけられなかったのでご教授を願いたいと思います。

動かしたい動作としては
while(1)
{
printf("テスト表示\n");
}

のような処理をwhileの繰り返しで一定の時間置きに実行する、と言うことです。
例えば、上のwhile文の繰り返しを実行画面で1分待ったら実行、さらに1分経過したら実行。1分置きに実行画面に「テスト表示」と出るようなプログラムです。
while文について色々調べたのですが、その辺の処理の事は載っていなかったので、よろしくお願いします。

開発環境として、
OS:FreeBSD5.3R
コンパイラ:gcc-3.2.1
です。


この投稿にコメントする

削除パスワード

発言に関する情報 題名 投稿番号 投稿者名 投稿日時
<子記事> Re:while文の時間制御の繰り返し 23435 RiSK 2005/10/01 08:40:39
<子記事> Re:while文の時間制御の繰り返し 23440 サイ 2005/10/01 20:42:18


No.23435

Re:while文の時間制御の繰り返し
投稿者---RiSK(2005/10/01 08:40:39)


>動かしたい動作としては
>while(1)
>{
> printf("テスト表示\n");
>}
>
>のような処理をwhileの繰り返しで一定の時間置きに実行する、と言うことです。

sleepは使えませんか?

>例えば、上のwhile文の繰り返しを実行画面で1分待ったら実行、さらに1分経過したら実行。1分置きに実行画面に「テスト表示」と出るようなプログラムです。
>while文について色々調べたのですが、その辺の処理の事は載っていなかったので、よろしくお願いします。

ビジーループdo-whileで良ければ,「時計のプログラムと一時待機」とか参考に。


この投稿にコメントする

削除パスワード

No.23436

Re:while文の時間制御の繰り返し
投稿者---サイ(2005/10/01 10:45:11)


>sleepは使えませんか?
>ビジーループdo-whileで良ければ,「時計のプログラムと一時待機」とか参考に。

ありがとうございます。確かに、whileの中に任意の待ち時間を作ることができました。しかし、僕がこの待ち時間を使いたかった理由は、while文の繰り返しで、とても重い処理をするので待ち時間を入れることで、連続して実行させないようにしたかったのです。

厳密的にわかってるわけではありませんが、FreeBSDにはどれだけ負荷が掛かっているか、視覚的にグラフで出される情報があります。参考に使わせていただいたsleepを
int i=0;
while(i < 10)
{
printf("test:%d\n",i);
i++;
my_sleep(10);
}
と、簡単なテストプログラムで試したところ、かなりの負荷が掛かりました。
あまり負荷が掛からずに時間制御できるものはありませんかね・・・。
あと、はじめから時間制御の趣旨を説明するべきでした、すいません。
自分でも、もう少し他に方法がないか調べてまいります。


この投稿にコメントする

削除パスワード

No.23437

Re:while文の時間制御の繰り返し
投稿者---nop(2005/10/01 10:50:59)


>僕がこの待ち時間を使いたかった理由は、while文の繰り返しで、とても重い処理をするので待ち時間を入れることで、連続して実行させないようにしたかったのです。

それなら、sleep()を使うべき。


この投稿にコメントする

削除パスワード

No.23439

Re:while文の時間制御の繰り返し
投稿者---RiSK(2005/10/01 12:31:46)


>>sleepは使えませんか?

このsleepはmy_sleep関数ではなく,処理系で用意しているsleep関数の事ですよ。
nopさんの意見に一票。


この投稿にコメントする

削除パスワード

No.23438

Re:while文の時間制御の繰り返し
投稿者---zero(2005/10/01 10:52:57)


signal()とalarm()関数を用いれば以下のように実装できます。

#include <stdio.h>
#include <unistd.h>
#include <signal.h>

void sig_alrm(int signo) {
    printf("テスト表示\n");
    alarm(60);
}

int main(int argc, char *argv[]) {

    signal(SIGALRM, sig_alrm);
    alarm(60);

    while (1) {
        sleep(1);
    }

    return 0;
}


上記ソースは、60秒毎に「テスト表示」と標準出力に表示します。
無限ループにしてあるので、終了させるには「Ctl+C」で終了させて下さい。


この投稿にコメントする

削除パスワード

No.23440

Re:while文の時間制御の繰り返し
投稿者---サイ(2005/10/01 20:42:18)


sleepでうまくいきました!

RiSKさんnopさんzeroさん、ありがとうございました!
おかげで納得できるものができました。



この投稿にコメントする

削除パスワード

管理者用メニュー    ツリーに戻る    携帯用URL    ホームページ    ログ    タグ一覧