待ち時間についてのプログラム

タグの編集
投稿者 ゆき  (高校生) 投稿日時 2009/10/22 23:51:17
プログラム中で何秒か待ってから次のプログラムに進むみたいなコードってありますか?

例えば絵を表示してから2秒後に違う絵を表示みたいに。

あるなら、またそれは0.01秒とかすごい短い時間でもいけるのか教えてください。
投稿者 ?-?  (その他) 投稿日時 2009/10/23 00:05:53
> 投稿者 ゆき   (高校生)   投稿日時 2009/10/22 14:51:17  
> プログラム中で何秒か待ってから次のプログラムに進むみたいなコードってありますか?

> 例えば絵を表示してから2秒後に違う絵を表示みたいに。

> あるなら、またそれは0.01秒とかすごい短い時間でもいけるのか教えてください。 
 
ありますよ。


'一秒間(1000ミリ秒)停止する
System.Threading.Thread.Sleep(1000)

引用元
http://dobon.net/vb/dotnet/process/sleep.html
投稿者 ゆき  (社会人) 投稿日時 2009/10/23 00:17:48
すごいですね!

これどれだけ短くできるんですか
投稿者 busa  (社会人) 投稿日時 2009/10/23 01:27:03
> これどれだけ短くできるんですか 

少しは自力で調べたんかいな?
投稿者 葉月  (社会人) 投稿日時 2009/10/23 03:08:20
こんにちは。

作るプログラムによって、設定する時間は大きく変わります。
他の回答者の例を引用させてもらうと、こういった使い方もできます。
System.Threading.Thread.Sleep(100)

ただ、100に設定した場合は
System.Threading.Thread.Sleep(1000)
に設定した時に比べて負荷がかかります。

詳細は、言葉で説明するより(※1)タスクマネージャを起動させて見た方が
理解できると思います。

タスクマネージャのパフォーマンスタブに、"CPU使用率"という項目があります。
CPU使用率が高いと負荷がかかっている状態になります。
実際に、Sleepの値を変更して、見比べると納得しやすいです。

以上のことからアドバイスをもらうより、※ タスクマネジャーを起動させて
確認した方が学習できるし実用的です。
あえて回答を言うと、使う環境により設定を変えるのが望ましいになるのでしょうか。

(※1)
タスクマネージャは、Ctrlキーを押しながらShiftキーとEscキーを同時に押してみてください。
投稿者 聖帝サウザー  (中学生) 投稿日時 2009/10/23 03:24:24
タイマーコンポーネントを沢山使えば?
V6とかは知らんが、VB2008の無料版に付いてるが。
投稿者 まだまだ  (中学生) 投稿日時 2009/10/23 04:41:51
僕もSystem.Threading.Thread.Sleep(oo)を使うより
Timerコンポネートを使用することをお勧めします。
Sleepのほうはすべてを止めてしまうので、十秒とかの長時間Sleepすると
応答なしとして扱われることがあります。バックグラウンドの場合は別ですが。

両方とも一秒は1000です。よって
System.Threading.Thread.Sleep(100)の場合は
0.1秒止まります。
投稿者 あにす  (社会人) 投稿日時 2009/10/23 08:35:54
ごく短い間隔で処理をしたい場合で、かつPCのCPUの大部分を占有してもよい場合には(PCゲーム等がそうですね)下記のような方法が使われることがあります。
waitの値を変えることで0.001秒間隔まで短い間隔で実行するように記述することが出来ます。ただ、実際にその間隔で実行されるかどうかは実行するPCの性能次第です。

通常このようなループでの処理は、ループ内の処理中にWindowsのメッセージが処理されないため、アプリケーションが応答無しの状態になる原因になるのですが、Application.DoEvents()メソッドでWindowsのメッセージを処理させることでこの問題を回避しています。

Module Module1
    Public Sub Main()
        Dim mainForm As New Form()
        mainForm.Show()

        Dim nextWork As Double = Environment.TickCount
        Dim wait As Double = 10     '0.01秒は10ミリ秒 
        Dim currentTime As Double

        While mainForm.Created
            currentTime = Environment.TickCount

            If currentTime >= nextWork Then
                'ここで処理をする 

                nextWork = nextWork + wait
            End If

            Application.DoEvents()
        End While
    End Sub
End Module
投稿者 トマト  (小学生) 投稿日時 2009/10/31 23:59:14
>これどれだけ短くできるんですか
ミリ秒なのであにすさんの言うとおり0.001秒までいけます。
でもあまり意味がない気がします。0.5秒ぐらいまでぐらいしか使うことがなさそうですし。

System.Threading.Thread.Sleepの最大値は2147483647ミリ秒
     ↓
2147483.647秒
     ↓
35791.394116666666666666666666667分
     ↓
596.52323527777777777777777777778時間!
あってますか?
投稿者 聖帝  (小学生) 投稿日時 2009/11/1 02:41:00
いや、使えるでしょ。
アニメーションみたいにね。
例えば、サイコロの転がる絵を20枚用意すれば、3Dを使わなくても、綺麗に回転しているように見せることができるし、おみくじガラポンの絵を20枚用意すれば回転をVBで綺麗に再現できる。
VBの処理速度の苦手なところで使えるなぁ。あはは。