質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.48%
C

C言語は、1972年にAT&Tベル研究所の、デニス・リッチーが主体となって作成したプログラミング言語です。 B言語の後継言語として開発されたことからC言語と命名。そのため、表記法などはB言語やALGOLに近いとされています。 Cの拡張版であるC++言語とともに、現在世界中でもっとも普及されているプログラミング言語です。

OS

OS(オペレーティングシステム)は、システムソフトウェアの一種であり、一般的に、ハードウェアを直接的に管理・操作する最も中心的な機能を有するソフトウェアがオペレーティングシステムとして呼ばれます。

while

Whileは多くの言語で使われるコントロール構造であり、特定の条件が満たされる限り一連の命令を繰り返し実行します。

プログラミング言語

プログラミング言語はパソコン上で実行することができるソースコードを記述する為に扱う言語の総称です。

Q&A

解決済

3回答

12582閲覧

while loop内のsleepについて

退会済みユーザー

退会済みユーザー

総合スコア0

C

C言語は、1972年にAT&Tベル研究所の、デニス・リッチーが主体となって作成したプログラミング言語です。 B言語の後継言語として開発されたことからC言語と命名。そのため、表記法などはB言語やALGOLに近いとされています。 Cの拡張版であるC++言語とともに、現在世界中でもっとも普及されているプログラミング言語です。

OS

OS(オペレーティングシステム)は、システムソフトウェアの一種であり、一般的に、ハードウェアを直接的に管理・操作する最も中心的な機能を有するソフトウェアがオペレーティングシステムとして呼ばれます。

while

Whileは多くの言語で使われるコントロール構造であり、特定の条件が満たされる限り一連の命令を繰り返し実行します。

プログラミング言語

プログラミング言語はパソコン上で実行することができるソースコードを記述する為に扱う言語の総称です。

0グッド

0クリップ

投稿2015/12/19 21:23

編集2015/12/20 10:27

サーバープログラム中での待機状態の際に

c

1while{ 2 sleep(1) 3}

のように記述するのは正しい方式なのでしょうか?
このような待機状態の正しい記述を教えていただきたいです.

[追記]
みなさん回答ありがとうございました.
今回に質問していたのはLinux系のサーバプログラムにおいて, マルチスレッドで多重化したスレッド内で, 割り込み処理のシグナルを待っている文です.
こんらんさせるような質問文もうしわけありませんでした

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

kozuchi

2015/12/20 00:43

質問が漠然としすぎていて、正しいとも間違いともお答えしにくいです。 > 正しい方式なのでしょうか? とのお尋ねということは、どこかしら「ここは正しくないのではないか」と疑問をお持ちということだと思うのですが、 どういった点についてそうお考えかお教えいただけた方がきちんと答えられると思います。
otn

2015/12/20 00:53

何を待機するのでしょうか?
guest

回答3

0

ベストアンサー

こんにちは。

まず、文法的な間違いはMarkerさんの回答をご参照下さい。
次に、待機の終了はどのような契機で行うのでしょうか?
while()ループを回すより、その契機にてシグナルなりイベントなりを発行するようにして、それを待つAPIを使うのが望ましていです。

while()ループ内でsleep()しつつ待機終了を待つ場合、下記問題が発生します。

①sleep()時間を長く取ると、待機終了状態になって実際に待機ループから抜けるまでに時間がかかります。
最大sleep()時間、平均sleep()時間の半分です。
②sleep()時間を短くすると頻繁にCPUが割り当てられるため、無駄にCPUを消費します。
その結果、他のプロセスに割り当てられるCPU時間が短くなり、システム全体の性能が劣化します。
③OSにもよりますが、最小sleep()時間があります。
sleep(1)と書いても1mSecの待ちになるとは限りません。Windowsの場合、デフォルトでは15mSec毎にしか起きません。

投稿2015/12/20 01:02

Chironian

総合スコア23272

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

0

文法的な間違いはすでに指摘されていますね。
まず、そのサーバープログラムで「何を」待っているのかが判らないので、その待機方法が正しいのかどうかは判断できません。
sleep関数が小文字ということはおそらくUnix系だと思いますが、sleep関数の待ち時間は秒単位ですので、whileの条件式で何かのイベントを判定したとしても、反応が最悪1秒遅くなります。ですので、イベント待ちの方法としては正しくないように思います。

あるいは、考えられることとしてはシグナルによるイベント駆動でしょうか。私はシグナルを積極的に使ったことがないのであまり詳しくはないのですが、別プロセス(自身が作った子プロセスかもしれない)からのシグナル待ちをするときは、そのような書き方をするのかもしれません。

投稿2015/12/20 04:08

catsforepaw

総合スコア5938

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

0

同期通信だと思うので、待つ必要はないと思いますよ。
大気がどうしても必要なら、

c

1int flag = 1; 2while(flag){ 3//処理が終わったら、flag=0にする 4 5}

こんな感じだと思いますよ…
参考までにどうぞC言語でのhttp通信
解釈違いでしたらすみません…

投稿2015/12/19 23:51

luma

総合スコア183

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.48%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問