ふらっと C#,C♯,C#(初心者用) Part141

■ このスレッドは過去ログ倉庫に格納されています
1デフォルトの名無しさん (ワッチョイ 2317-qMUn)
垢版 |
2018/12/15(土) 11:07:07.89ID:0aSEF/I+0
!extend:checked:vvvvv:1000:512
次スレを立てる時は↑を2行冒頭に書くこと(1行分は消えて表示されない為)

「どんなにくだらないC#プログラミングやVisual C#の使い方に関する質問でも誰かが優しくレスをしてくれるスレッド」です。
他のスレッドでは書き込めないような低レベルな質問、
質問者自身なんだか意味がよく分からない質問、
ググろうにもキーワードが分からないなど、勇気をもって書き込んでください。
内容に応じて他スレ・他板へ行くことを勧められることがあります。ご了承下さい。
なお、テンプレが読めない回答者、議論をしたいだけの人は邪魔なので後述のC#相談室に移動して下さい。
C#に関係の無い話題や荒らしの相手や罵倒レスはやめてください

>>980を踏んだ人は新スレを建てて下さい。
>>980が無理な場合、話し合って新スレを建てる人を決めて下さい。

■関連スレ
C#, C♯, C#相談室 Part93
https://mevius.5ch.net/test/read.cgi/tech/1492818720/
■前スレ
ふらっと C#,C♯,C#(初心者用) Part139
https://mevius.5ch.net/test/read.cgi/tech/1538646998/
■コードを貼る場合は↓を使いましょう。
http://ideone.com/
https://dotnetfiddle.net/

■情報源
https://msdn.microsoft.com/ja-jp/library/gg145045.aspx
https://docs.microsoft.com/ja-jp/dotnet/csharp/language-reference/index
https://msdn.microsoft.com/en-us/library/gg145045.aspx
http://referencesource.microsoft.com/
VIPQ2_EXTDAT: checked:vvvvv:1000:512:----: EXT was configured
2019/01/29(火) 18:47:23.89ID:8rAEnTT80
>>463
Sleep() 自体はそんなに積極的に使うべきものではない。ただし、
「逐次処理」で書いたほうが書きやすいような場合に使うと便利
な場合がある。例えば、単なる繰り返しではない、以下のように順にコードを
実行していくような場合:
(処理1)
(何かのフラグが変化するか、または単に時間が経つまで待機)
(処理2)
(何かのフラグが変化するか、または単に時間が経つまで待機)
(処理3)
・・・

ここで、処理1、処理2・・・の内容がほとんど同じような場合は、Timer を
使うべきだが全く違うようなものが10個も並ぶような場合だったら、Sleep()
を使うと楽。

SetEvent() などの同期オブジェクトを待つ WaitForSingleObject() などがサポート
されてない環境において、何かのフラグが立つのをポーリングして待たざるを得ない
ような時に、間に何も「はさまない」でループするとCPUがフルパワー状態で回って
しまって電気の無駄使いになるのが、Sleep() を「はさむ」と、Sleep()に指定する
待ち時間がたとえ短時間であっても、Sleep() の中で待ってる間は CPU が HLT 状態
になるので、電力消費を劇的に抑えることが出来る。
WaitForSingleObject() などが存在する環境では、Sleep() は余り使わないで良い。
2019/01/29(火) 18:47:44.92ID:aKVTslCz0
>>463
役割が全部違う
Sleep
指定時間の間は同じスレッドでのGUI等の入力が停止する
Sleep/Task.Delay
(実行後に)確実に指定した時間が停止する
Timer
指定した間隔で実行される
2019/01/29(火) 18:59:35.28ID:8rAEnTT80
【参考】
Sleep() の意味は、待つときに、HLT 命令を使うこと。HLT 命令は、特権命令なので
ユーザーランド(一般アプリ)のプロセスでは実行できないため、OSのAPIで実行して
貰うしかない。なお、マルチタスクOSで、HLT 命令を実行すると、他のプロセスに実行が
移ることが多い。

多くのアーキテクチャに置いて、HLT 命令は、「busy wait」で待つよりも、
劇的に電力消費と熱の発生を抑えることが出来る:

https://en.wikipedia.org/wiki/HLT_(x86_instruction)

Almost every modern processor instruction set includes an instruction or
sleep mode which halts the processor until more work needs to be done.
In interrupt-driven processors, this instruction halts the CPU until an
external interrupt is received. On most architectures, executing such
an instruction allows the processor to significantly reduce its power
usage and heat output, which is why it is commonly used instead of
busy waiting for sleeping and idling.
2019/01/29(火) 19:19:24.76ID:BTNuwc+5a
>>463
どっちにしろそんな違いがプログラムのパフォーマンスに影響なんかしないw
そもそも可読性よりパフォーマンスを優先する時代じゃない。
つまりより可読的な方法を選択すべき。

一定間隔で処理を繰り返すなら普通はタイマーを使った方が可読的でしょう、
繰り返し終了後に別の処理を継続させたい、みたいな事情があればあえてループ(つまりSleep)を
選択する場合もあるかもしれない
■ このスレッドは過去ログ倉庫に格納されています
5ちゃんねるの広告が気に入らない場合は、こちらをクリックしてください。

ニューススポーツなんでも実況