<?xml version="1.0" encoding="UTF-8" ?> <rss version="2.0" xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:trackback="http://madskills.com/public/xml/rss/module/trackback/" xmlns:wfw="http://wellformedweb.org/CommentAPI/" xmlns:slash="http://purl.org/rss/1.0/modules/slash/"><channel><title>発見した事</title><link>http://blogs.wankuma.com/esten/category/1226.aspx</link><description>.NETとCLRとVisualStadio2005とのつきあいでびっくりした事</description><managingEditor>片桐　継（Tugu Katagiri）</managingEditor><dc:language>ja-JP</dc:language><generator>.Text Version 0.95.2004.102</generator><item><dc:creator>片桐　継（Tugu Katagiri）</dc:creator><title>やまたのおろちが酒を飲む～片桐的VB.NETスレッドプログラミング～その３</title><link>http://blogs.wankuma.com/esten/archive/2008/12/27/165136.aspx</link><pubDate>Sat, 27 Dec 2008 21:27:00 GMT</pubDate><guid>http://blogs.wankuma.com/esten/archive/2008/12/27/165136.aspx</guid><wfw:comment>http://blogs.wankuma.com/esten/comments/165136.aspx</wfw:comment><comments>http://blogs.wankuma.com/esten/archive/2008/12/27/165136.aspx#Feedback</comments><slash:comments>5</slash:comments><wfw:commentRss>http://blogs.wankuma.com/esten/comments/commentRss/165136.aspx</wfw:commentRss><trackback:ping>http://blogs.wankuma.com/esten/services/trackbacks/165136.aspx</trackback:ping><description>&lt;p&gt;やまたのおろちが酒飲んでます。あいかわらずの飲兵衛です。&lt;/p&gt; &lt;p&gt;その１&lt;/p&gt; &lt;p&gt;&lt;a href="http://blogs.wankuma.com/esten/archive/2008/12/03/162607.aspx"&gt;http://blogs.wankuma.com/esten/archive/2008/12/03/162607.aspx&lt;/a&gt;&lt;/p&gt; &lt;p&gt;ここでは、ただ首一本がガブガブ飲むだけだったんだけど、それじゃ他の首が飲ませろとうるさいので、全部の首がせーのっ！で飲めるようにして&lt;/p&gt; &lt;p&gt;その２&lt;/p&gt; &lt;p&gt;&lt;a title="http://blogs.wankuma.com/esten/archive/2008/12/09/163043.aspx" href="http://blogs.wankuma.com/esten/archive/2008/12/09/163043.aspx"&gt;http://blogs.wankuma.com/esten/archive/2008/12/09/163043.aspx&lt;/a&gt;&lt;/p&gt; &lt;p&gt;となったわけだけれども、コメントでツッコミがあったように、これだけでは全く持って、ダメダメプログラミングなわけですｗ。&lt;font color="#ff0000"&gt;はい、わざとです。&lt;/font&gt;&lt;/p&gt; &lt;p&gt;では、どうしようか？　リファクタする？&lt;/p&gt; &lt;p&gt;&lt;font color="#000080"&gt;でもその前に、まだやっておかなくちゃいけないことがあるんだわ。&lt;/font&gt;&lt;/p&gt; &lt;p&gt;やまたのおろちが飲みたい酒ツボが１つだったときにどうなるかって話。&lt;/p&gt; &lt;p&gt; &lt;div class="wlWriterSmartContent" id="scid:812469c5-0cb0-4c63-8c15-c81123a09de7:bc38ab75-1fcc-40d6-9c5d-ca141bc3d4ac" style="padding-right: 0px; display: inline; padding-left: 0px; float: none; padding-bottom: 0px; margin: 0px; padding-top: 0px"&gt;&lt;pre name="code" class="vb:nocontrols"&gt;Imports System
Imports System.Threading

Module OrochMTA

    Delegate Sub DrinkingSAKE()

    '酒ツボは一つ
    Private sakeTubo As Integer

    '酒ツボの残り
    Private sakeNokori As Integer

    &amp;lt;MTAThread()&amp;gt; _
  Public Sub Main()

    '酒ツボに酒を準備
    sakeTubo = 50000
    sakeNokori = sakeTubo

    '本体で首が別々に酒飲みするのを身構える

        Dim ts As New ThreadStart(AddressOf OrochiDrinking)

        Dim workerThread As New Thread(ts)

        workerThread.SetApartmentState(ApartmentState.MTA)

        workerThread.Start()

        workerThread.Join()

        Stop

  End Sub

    Private Sub OrochiDrinking()

        'まずは首を八本で飲んでみる
        Dim headCount As Integer = 8

        '酔っ払い待ち行列を首の数だけ準備
        Dim yoppa(headCount - 1) As WaitHandle

        For i As Integer = 1 To headCount

            '飲んだ首から酔っ払いへと
            yoppa(i - 1) = HeadDrinking(i).AsyncWaitHandle

        Next

        '全部の首が酔っ払いになるまで待機
        WaitHandle.WaitAll(yoppa)

    End Sub

    Private Function HeadDrinking(ByVal headNo As Integer) As IAsyncResult

        '指定した番号の首に酒を飲ませる
        Dim myHead As New OrochiHead(headNo)

        Dim gubi As New DrinkingSAKE(AddressOf myHead.Drink)

        '酒飲み開始とともに、酔っ払い待ち行列へ戻す
        Return gubi.BeginInvoke(Nothing, Nothing)

    End Function

    'おろちの首をクラス化
Private Class OrochiHead

    Private meNumber As Integer

    '何番目の首なのかを保存
    Public Sub New(ByVal headNo As Integer)

        meNumber = headNo

    End Sub

    '酒を飲むメソッド
    Public Sub Drink()

        Dim sakeZuki As New Thread( _
          New ThreadStart(AddressOf DrinkSAKE)) ' 

        sakeZuki.Start()
        sakeZuki.Join()

          Console.WriteLine("ぷはーっ！ {0}番目の首、飲み終わり！", meNumber)

    End Sub


  ' 酒のみスレッド
  Private Sub DrinkSAKE()

        Dim totalDrunk As Integer = 0
        Dim nowDrink As Integer

        Dim oneDrink As New Random
        Dim oneBreath As New Random

        '酒ツボの中の酒を飲み干す
        While (sakeNokori &amp;gt; 0)

            '一回飲むたびに息継ぎ
            Thread.Sleep(oneBreath.Next(30, 60))

            '一回ぐび
            nowDrink = oneDrink.Next(1, 100)

            '全部でどれくらい飲んだ？
            sakeNokori -= nowDrink

            Console.WriteLine("{0}番目の首が {1} リットル ぐびっ : 残り {2} リットル", meNumber, nowDrink, sakeNokori)


        End While

  End Sub

End Class

End Module&lt;/pre&gt;&lt;/div&gt;&lt;/p&gt;
&lt;p&gt;ぱっと見、これだけに見えるよね？&lt;/p&gt;
&lt;p&gt;でも、これが落とし穴。&lt;/p&gt;
&lt;p&gt;&lt;img style="border-right: 0px; border-top: 0px; border-left: 0px; border-bottom: 0px" height="283" alt="image" src="http://esten.cside.com/img/VB.NET_124A3/image.png" width="362" border="0"&gt; &lt;/p&gt;
&lt;p&gt;CPUの数が多い時、スレッドはどのCPUで管理されるかはOS次第。でもそのバラバラに動いているスレッドの処理が一箇所のアドレスにある値を読み出して書き出すわけだから、「今ある酒の量が本当に正しい」かどうか判らなくなる。これが小さなスレッドと一瞬で終わるプログラムなら気がつかないかもしれない。でも、沢山のCPU、スレッドで動いたときこの落とし穴ははっきりと結果にでてくるんだよね。&lt;/p&gt;
&lt;p&gt;&lt;font color="#008000"&gt;つまり、一つの酒ツボから複数の首が酒を飲むわけだけど、実際に、首の動きを制御しているのは、CPU。だから、CPUが複数あると、本当の意味で「同時に」首が酒を飲むことができるわけで、そうなると、酒ツボから飲んだ→残りこんだけ、という動きも本当の意味で「同時に」起きちゃうことになるの。&lt;strong&gt;そうなっちゃうと、今の酒の残り、は本当に正しい！ということがこのままだといえなくなっちゃうんだ。&lt;/strong&gt;&lt;font color="#ff0000"&gt;たとえば残り１００リットルから、ある首Aが２０リットル飲んで、ある首Bが１０リットル飲んだ。この時、本当だったら残りは７０リットルのはずなんだけど、２個のCPUがあるときに、Aの「100-20」の計算を１CPU、Bの「100-10」の計算を１CPUがそれぞれに同時にしちゃったら結果は「80」もしくは「90」として格納、これ、プログラム的には正しい動作なんだもの。&lt;/font&gt;見えないだけで、実はやまたのおろちの首はおもいっきり絡まってて、絡まったなりに酒を飲んだツモリになってたりしてるってことだよね。&lt;/font&gt;&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;厄介なのは、これ、必ず再現できると限らないんだ。&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;VisualStudioのデバッガをつかってブレークポイントを仕掛けて止めただけでも、マルチスレッドプログラミングは直列の処理に最適化されてしまうので、ステップするとうまくいっちゃったりとかする。「なんで？何が悪いの？」がさっぱり判らなくなっちゃう。&lt;/p&gt;
&lt;p&gt;&lt;font color="#0000ff"&gt;&lt;strong&gt;おそろしいよね、それって。&lt;/strong&gt;&lt;/font&gt;&lt;/p&gt;
&lt;p&gt;だから、スレッド間でやり取りする値、読み出したり書き出したり更新したりする時には、必ずスレッド間で同期を取れるように作ってあげないといけない。&lt;/p&gt;
&lt;p&gt;マルチスレッドが難しいのはこの考え方があるからで、実はこれを回避するための処理クラスやステートメントが、ちゃんと用意されてたりするのね。&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;それが、InerLockedクラス、そして、SyncLockステートメントブロック&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;じゃ、こいつらを使って、やまたのおろちに行儀良くお酒を飲んでもらおうと思う。ついでに、リファクタってやつもやってみるってことで、それは次回ねｗ&lt;/p&gt;
&lt;p&gt;&lt;font color="#ff00ff"&gt;実はまだ出てない新キャラがいるんだ、スサノオってのがｗｗｗ&lt;/font&gt;&lt;/p&gt;&lt;img src ="http://blogs.wankuma.com/esten/aggbug/165136.aspx" width = "1" height = "1" /&gt;</description></item><item><dc:creator>片桐　継（Tugu Katagiri）</dc:creator><title>やまたのおろちが酒を飲む～片桐的VB.NETスレッドプログラミング～その２</title><link>http://blogs.wankuma.com/esten/archive/2008/12/09/163043.aspx</link><pubDate>Tue, 09 Dec 2008 10:23:00 GMT</pubDate><guid>http://blogs.wankuma.com/esten/archive/2008/12/09/163043.aspx</guid><wfw:comment>http://blogs.wankuma.com/esten/comments/163043.aspx</wfw:comment><comments>http://blogs.wankuma.com/esten/archive/2008/12/09/163043.aspx#Feedback</comments><slash:comments>7</slash:comments><wfw:commentRss>http://blogs.wankuma.com/esten/comments/commentRss/163043.aspx</wfw:commentRss><trackback:ping>http://blogs.wankuma.com/esten/services/trackbacks/163043.aspx</trackback:ping><description>&lt;p&gt;&lt;strong&gt;やまたのおろちはお酒大好き&lt;/strong&gt;。&lt;font color="#000080"&gt;とりあえず前回は代表の首一本だけが酒ツボからグビグビいっちゃう想定でシングルスレッドのお話&lt;/font&gt;をしてたりなんかしたのね。&lt;/p&gt; &lt;p&gt;&lt;a title="http://blogs.wankuma.com/esten/archive/2008/12/03/162607.aspx" href="http://blogs.wankuma.com/esten/archive/2008/12/03/162607.aspx"&gt;http://blogs.wankuma.com/esten/archive/2008/12/03/162607.aspx&lt;/a&gt;&lt;/p&gt; &lt;p&gt;でも、これだと他の酒のみ待ち首はきっとウルサイ。先に飲ませろ、俺に飲ませろ、&lt;strong&gt;まぁ黙れやこの飲兵衛よっぱらい爬虫類もどきドモがっ！&lt;/strong&gt;といいたくなるような状況にきっとなっちゃう。&lt;/p&gt; &lt;p&gt;&lt;font color="#008000"&gt;&lt;strong&gt;そこで、全部の首に、いっせーーーーの！で飲ませようというのが今回のお話、マルチスレッドね。&lt;/strong&gt;&lt;/font&gt;&lt;/p&gt; &lt;p&gt;実は前回で、一つの首が酒を飲むのにデリゲートしてシングルスレッドで飲ませるところまではできた。つまり簡単に考えれば、&lt;font color="#ff0000"&gt;シングルになっているところをマルチにするだけで、事は解決できるはず&lt;/font&gt;。&lt;/p&gt; &lt;div class="wlWriterSmartContent" id="scid:812469c5-0cb0-4c63-8c15-c81123a09de7:616a266c-5095-4425-8872-da35038df9f7" style="padding-right: 0px; display: inline; padding-left: 0px; float: none; padding-bottom: 0px; margin: 0px; padding-top: 0px"&gt;&lt;pre name="code" class="vb:nocontrols"&gt;Imports System.Threading

Module OrochMTA

    Delegate Sub DrinkingSAKE()

    &amp;lt;MTAThread()&amp;gt; _
  Public Sub Main()

    '本体で首が別々に酒飲みするのを身構える

        Dim ts As New ThreadStart(AddressOf OrochiDrinking)

        Dim workerThread As New Thread(ts)

        workerThread.SetApartmentState(ApartmentState.MTA)

        workerThread.Start()

        workerThread.Join()

        Stop

  End Sub

    Private Sub OrochiDrinking()

        'まずは首を八本で飲んでみる
        Dim headCount As Integer = 8

        '酔っ払い待ち行列を首の数だけ準備
        Dim yoppa(headCount - 1) As WaitHandle

        For i As Integer = 1 To headCount

            '飲んだ首から酔っ払いへと
            yoppa(i - 1) = HeadDrinking(i).AsyncWaitHandle

        Next

        '全部の首が酔っ払いになるまで待機
        WaitHandle.WaitAll(yoppa)

    End Sub

    Private Function HeadDrinking(ByVal headNo As Integer) As IAsyncResult

        '指定した番号の首に酒を飲ませる
        Dim myHead As New OrochiHead(headNo)

        Dim gubi As New DrinkingSAKE(AddressOf myHead.Drink)

        '酒飲み開始とともに、酔っ払い待ち行列へ戻す
        Return gubi.BeginInvoke(Nothing, Nothing)

    End Function

    'おろちの首をクラス化
Private Class OrochiHead

    Private meNumber As Integer

    '何番目の首なのかを保存
    Public Sub New(ByVal headNo As Integer)

        meNumber = headNo

    End Sub

    '酒を飲むメソッド
    Public Sub Drink()

        Dim sakeZuki As New Thread( _
          New ThreadStart(AddressOf DrinkSAKE)) ' 

        sakeZuki.Start()
        sakeZuki.Join()

          Console.WriteLine("ぷはーっ！ {0}番目の首、飲み終わり！", meNumber)

    End Sub


  ' 酒のみスレッド
  Private Sub DrinkSAKE()

        '酒ツボの中の酒の量
        Dim totalSAKE As Integer = 1000

        Dim totalDrunk As Integer = 0
        Dim nowDrink As Integer

        Dim oneDrink As New Random
        Dim oneBreath As New Random

        '酒ツボの中の酒を飲み干す
        While (totalDrunk &amp;lt;= totalSAKE)

            '一回飲むたびに息継ぎ
            Thread.Sleep(oneBreath.Next(30, 60))

            '一回ぐび
            nowDrink = oneDrink.Next(1, 100)
            Console.WriteLine("{0}番目の首が {1} リットル ぐびっ", meNumber, nowDrink)

            '全部でどれくらい飲んだ？
            totalDrunk += nowDrink

        End While

  End Sub

End Class

End Module

&lt;/pre&gt;&lt;/div&gt;
&lt;p&gt;変わった部分、あんまり無い（笑）。でも動かしてみると判るけど、全部の首が並列でぐびぐび酒飲んじゃう。&lt;/p&gt;
&lt;p&gt;ポイントは、&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;７行目：&amp;lt;MTAThread()&amp;gt;&lt;br&gt;16行目：workerThread.SetApartmentState(ApartmentState.MTA)&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;これによって、「これから動かすスレッドは並列で動かすつもりなんでよろしく！」と準備して、&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;54行目：Return gubi.BeginInvoke(Nothing, Nothing)&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;で実際に、スレッドが「非同期で」起動、でもって、一つ一つのスレッドの背番号（IAsyncResultクラスのWaitHandle）をうけとって&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;42行目：WaitHandle.WaitAll(yoppa)&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;で全部の背番号にぶら下がったスレッドが終了するまで処理を待機する、ってところ。&lt;/p&gt;
&lt;p&gt;なんだ、簡単じゃぁん！なんて思うでしょ？実際、簡単に見えてくるもの。でもこれがでっかいでっかい落とし穴。動くけど、このソースだけじゃまだまだダメだったりなんかする。過信するなよ、.NetFrameworkプログラミング（笑）&lt;/p&gt;
&lt;p&gt;&lt;font color="#008000"&gt;&lt;strong&gt;実は村で用意したのは馬鹿でかい酒ツボ一個。だから、首一つにつき酒ツボ一つじゃなくて、全部の首で一つの酒ツボから酒を飲むことになっちゃった！&lt;/strong&gt;&lt;/font&gt;&lt;/p&gt;
&lt;p&gt;って、この酒ツボが一個になった時に起きる時、マルチスレッドプログラミングで落っこちる地獄への入り口で、これがまた、ふっかーーい話だったりするの。&lt;font color="#ff0000"&gt;&lt;strong&gt;覚悟せよ、次回（笑）&lt;/strong&gt;&lt;/font&gt;&lt;/p&gt;&lt;img src ="http://blogs.wankuma.com/esten/aggbug/163043.aspx" width = "1" height = "1" /&gt;</description></item><item><dc:creator>片桐　継（Tugu Katagiri）</dc:creator><title>やまたのおろちが酒をのむ～片桐的VB.NETスレッドプログラミング～その１</title><link>http://blogs.wankuma.com/esten/archive/2008/12/03/162607.aspx</link><pubDate>Wed, 03 Dec 2008 22:56:00 GMT</pubDate><guid>http://blogs.wankuma.com/esten/archive/2008/12/03/162607.aspx</guid><wfw:comment>http://blogs.wankuma.com/esten/comments/162607.aspx</wfw:comment><comments>http://blogs.wankuma.com/esten/archive/2008/12/03/162607.aspx#Feedback</comments><slash:comments>5</slash:comments><wfw:commentRss>http://blogs.wankuma.com/esten/comments/commentRss/162607.aspx</wfw:commentRss><trackback:ping>http://blogs.wankuma.com/esten/services/trackbacks/162607.aspx</trackback:ping><description>&lt;p&gt;やまたのおろちって本体一つに八つの首があるんだって。３だとキングギドラで、４がヒュドラで、16だとミズノエリュウ、だったと思うの。で、このたくさんの首の一つ一つがドラゴンの顔になってて、口があって……。まぁ、ようするに、&lt;font color="#ff0000"&gt;そんな彼らに酒を飲んでもらおうというコンセプトで、スレッドプログラミングの話をしてみようと思うんだ&lt;/font&gt;。  &lt;p&gt;まずはシングルスレッドのお話。  &lt;p&gt;まずはシンプルに、ふつーのシングルスレッド。代表の一本の首だけが飲ンベって想定で。 流れとしては一本の首がごきゅごきゅと酒ツボを飲み干すっと。 &lt;/p&gt; &lt;div class="wlWriterSmartContent" id="scid:812469c5-0cb0-4c63-8c15-c81123a09de7:4e92f5b4-83a6-45fe-b77e-23e5a62749ba" style="padding-right: 0px; display: inline; padding-left: 0px; float: none; padding-bottom: 0px; margin: 0px; padding-top: 0px"&gt;&lt;pre name="code" class="vb:nocontrols"&gt;Imports System.Threading

Module OrochSTA

  Public Sub Main()

    Dim hontai As New Thread( _
      New ThreadStart(AddressOf DrinkSAKE)) ' 

    hontai.Start()
    hontai.Join()

      Console.WriteLine("ぷはーっ！")

        Stop
  End Sub

  ' 酒のみスレッド
  Private Sub DrinkSAKE()

        '酒ツボの中の酒の量
        Dim totalSAKE As Integer = 1000

        Dim totalDrunk As Integer = 0
        Dim nowDrink As Integer

        Dim oneDrink As New Random
        Dim oneBreath As New Random

        '酒ツボの中の酒を飲み干す
        While (totalDrunk &amp;lt;= totalSAKE)

            '一回飲むたびに息継ぎ
            Thread.Sleep(oneBreath.Next(30, 60))

            '一回ぐび
            nowDrink = oneDrink.Next(1, 100)
            Console.WriteLine("{0} リットル ぐびっ", nowDrink)

            '全部でどれくらい飲んだ？
            totalDrunk += nowDrink

        End While

  End Sub

End Module
&lt;/pre&gt;&lt;/div&gt;
&lt;div style="display: none"&gt;&amp;nbsp;&lt;/div&gt;この場合、&lt;font color="#ff0000"&gt;酒飲みはまだ一個の首でやってる。酒ツボも一つだけだから、さくーっとのんで終わり&lt;/font&gt;。で、つぎに、&lt;font color="#008000"&gt;このおろちの首をクラス化して、その一本の首に酒を飲ませてみる&lt;/font&gt;。これが大事な前フリｗ。あとで首がたくさんになるからね。 
&lt;div class="wlWriterSmartContent" id="scid:812469c5-0cb0-4c63-8c15-c81123a09de7:bf8b30b9-f1d1-454b-9ee7-d4a3e9ebb515" style="padding-right: 0px; display: inline; padding-left: 0px; float: none; padding-bottom: 0px; margin: 0px; padding-top: 0px"&gt;&lt;pre name="code" class="vb:nocontrols"&gt;Imports System.Threading

Module OrochSTA

  Public Sub Main()

    Dim myHead As New OrochiHead

        myHead.Drink()

        Stop
  End Sub

    'おろちの首をクラス化
Private Class OrochiHead

    '酒を飲むメソッド
    Public Sub Drink()

        Dim sakeZuki As New Thread( _
          New ThreadStart(AddressOf DrinkSAKE)) ' 

        sakeZuki.Start()
        sakeZuki.Join()

          Console.WriteLine("ぷはーっ！")

    End Sub


  ' 酒のみスレッド
  Private Sub DrinkSAKE()

        '酒ツボの中の酒の量
        Dim totalSAKE As Integer = 1000

        Dim totalDrunk As Integer = 0
        Dim nowDrink As Integer

        Dim oneDrink As New Random
        Dim oneBreath As New Random

        '酒ツボの中の酒を飲み干す
        While (totalDrunk &amp;lt;= totalSAKE)

            '一回飲むたびに息継ぎ
            Thread.Sleep(oneBreath.Next(30, 60))

            '一回ぐび
            nowDrink = oneDrink.Next(1, 100)
            Console.WriteLine("{0} リットル ぐびっ", nowDrink)

            '全部でどれくらい飲んだ？
            totalDrunk += nowDrink

        End While

  End Sub

End Class

End Module
&lt;/pre&gt;&lt;/div&gt;
&lt;p&gt;
&lt;div id="subjoinder" style="display: none"&gt;
&lt;p id="collapser"&gt;&lt;a onkeypress="expand(0,'subjoinder','expander');return false;" onclick="expand(0,'subjoinder','expander');return false;" href="#expander"&gt;&lt;/a&gt;&lt;/p&gt;&lt;/div&gt;
&lt;p&gt;&lt;/p&gt;
&lt;p&gt;&lt;/p&gt;
&lt;p&gt;で、首をクラス化することで、首が酒を飲む、というメソッドがラッピング。こうすると首一本のやるべきことが明確になる。そこで、飲ンベ首をデリゲートに登録して、さらに別スレッドで飲ませるように書き換えてみる。&lt;/p&gt;
&lt;div class="wlWriterSmartContent" id="scid:812469c5-0cb0-4c63-8c15-c81123a09de7:ccac1272-b4c6-44cb-940e-b2d8c72243d4" style="padding-right: 0px; display: inline; padding-left: 0px; float: none; padding-bottom: 0px; margin: 0px; padding-top: 0px"&gt;&lt;pre name="code" class="vb:nocontrols"&gt;Imports System
Imports System.Threading

Module OrochSTA

    Delegate Sub DrinkingSAKE()

  Public Sub Main()

    '本体で首が別々に酒飲みするのを身構える

        Dim ts As New ThreadStart(AddressOf OrochiDrinking)

        Dim workerThread As New Thread(ts)

        workerThread.SetApartmentState(ApartmentState.STA)

        workerThread.Start()

        workerThread.Join()

        Stop

  End Sub

    Private Sub OrochiDrinking()

        'まずは首を八本で飲んでみる
        Dim headCount As Integer = 8

        '全部の首が酒を飲み干す
        For i As Integer = 1 To headCount

            HeadDrinking(i)

        Next

    End Sub

    Private Sub HeadDrinking(ByVal headNo As Integer)

        '指定した番号の首に酒を飲ませる
        Dim myHead As New OrochiHead(headNo)

        Dim gubi As New DrinkingSAKE(AddressOf myHead.Drink)

        '酒飲み開始とともに、酔っ払い待ち行列へ戻す
        gubi.Invoke()

    End Sub

    'おろちの首をクラス化
Private Class OrochiHead

    Private meNumber As Integer

    '何番目の首なのかを保存
    Public Sub New(ByVal headNo As Integer)

        meNumber = headNo

    End Sub

    '酒を飲むメソッド
    Public Sub Drink()

        Dim sakeZuki As New Thread( _
          New ThreadStart(AddressOf DrinkSAKE)) ' 

        sakeZuki.Start()
        sakeZuki.Join()

          Console.WriteLine("ぷはーっ！ {0}番目の首、飲み終わり！", meNumber)

    End Sub


  ' 酒のみスレッド
  Private Sub DrinkSAKE()

        '酒ツボの中の酒の量
        Dim totalSAKE As Integer = 1000

        Dim totalDrunk As Integer = 0
        Dim nowDrink As Integer

        Dim oneDrink As New Random
        Dim oneBreath As New Random

        '酒ツボの中の酒を飲み干す
        While (totalDrunk &amp;lt;= totalSAKE)

            '一回飲むたびに息継ぎ
            Thread.Sleep(oneBreath.Next(30, 60))

            '一回ぐび
            nowDrink = oneDrink.Next(1, 100)
            Console.WriteLine("{0}番目の首が {1} リットル ぐびっ", meNumber, nowDrink)

            '全部でどれくらい飲んだ？
            totalDrunk += nowDrink

        End While

  End Sub

End Class

End Module
&lt;/pre&gt;&lt;/div&gt;
&lt;p&gt;
&lt;div id="subjoinder" style="display: none"&gt;
&lt;p id="collapser"&gt;&lt;a onkeypress="expand(0,'subjoinder','expander');return false;" onclick="expand(0,'subjoinder','expander');return false;" href="#expander"&gt;&lt;/a&gt;&lt;/p&gt;&lt;/div&gt;
&lt;p&gt;&lt;/p&gt;
&lt;p&gt;さて、こんなカンジで、&lt;font color="#ff0000"&gt;首の一本一本が順番に酒を飲んで、順番に飲み終わり、をシングルスレッドで動いてるってことに置き換えてもこれだけの方法があったりする&lt;/font&gt;。でもね、飲ンベ首が増えたら、待たせるとウルサイから皆せーの！で飲んじゃいなYO！ってことで並列化させようと思うんだ。これがマルチスレッドでの動き。それはまた次にね&lt;/p&gt;&lt;img src ="http://blogs.wankuma.com/esten/aggbug/162607.aspx" width = "1" height = "1" /&gt;</description></item><item><dc:creator>片桐　継（Tugu Katagiri）</dc:creator><title>Hyper-Vってここがすごい！</title><link>http://blogs.wankuma.com/esten/archive/2008/09/23/157320.aspx</link><pubDate>Tue, 23 Sep 2008 03:32:00 GMT</pubDate><guid>http://blogs.wankuma.com/esten/archive/2008/09/23/157320.aspx</guid><wfw:comment>http://blogs.wankuma.com/esten/comments/157320.aspx</wfw:comment><comments>http://blogs.wankuma.com/esten/archive/2008/09/23/157320.aspx#Feedback</comments><slash:comments>4</slash:comments><wfw:commentRss>http://blogs.wankuma.com/esten/comments/commentRss/157320.aspx</wfw:commentRss><trackback:ping>http://blogs.wankuma.com/esten/services/trackbacks/157320.aspx</trackback:ping><description>&lt;p&gt;Hyper-Vで仮想マシンを再構築→OSインストール完了→VisualStudio2008インストール中&lt;/p&gt; &lt;p&gt;&amp;nbsp;&lt;/p&gt; &lt;p&gt;に&lt;font color="#ff0000"&gt;悲劇は起きた&lt;/font&gt;&lt;/p&gt; &lt;p&gt;&amp;nbsp;&lt;/p&gt; &lt;p&gt;&lt;font color="#0000ff"&gt;&lt;strong&gt;ホストマシン、WindowsServer2008が更新プログラムアップデートの関係でいきなりの再起動！！！&lt;/strong&gt;&lt;/font&gt;&lt;/p&gt; &lt;p&gt;&amp;nbsp;&lt;/p&gt; &lt;p&gt;&lt;font color="#ff0000"&gt;&lt;strong&gt;ここまでインストールできたのに（号泣）&lt;/strong&gt;&lt;/font&gt;&lt;/p&gt; &lt;p&gt;しばし呆然としつつ、再起動したホストマシンから再度、ゲストマシンを見てみると……&lt;/p&gt; &lt;p&gt;&amp;nbsp;&lt;/p&gt; &lt;p&gt;&lt;font color="#008000"&gt;&lt;strong&gt;VisualStudio2008のインストール、順調に続行中でした&lt;/strong&gt;&lt;/font&gt;&lt;/p&gt; &lt;p&gt;&amp;nbsp;&lt;/p&gt; &lt;p&gt;つまり、ゲスト仮想マシンが稼動中に、ホスト側でOS停止が起きた場合でも、その停止直前の状態からゲスト仮想マシンは稼動継続できちゃうってことだね&lt;/p&gt; &lt;p&gt;&amp;nbsp;&lt;/p&gt; &lt;p&gt;&lt;strong&gt;さりげないけど、これってすごい！&lt;/strong&gt;&lt;br&gt;この時間から再インストールなんて、それ何て拷問？だもんねぇ&lt;/p&gt;&lt;img src ="http://blogs.wankuma.com/esten/aggbug/157320.aspx" width = "1" height = "1" /&gt;</description></item><item><dc:creator>片桐　継（Tugu Katagiri）</dc:creator><title>ありがとうございましたです</title><link>http://blogs.wankuma.com/esten/archive/2008/09/21/157206.aspx</link><pubDate>Sun, 21 Sep 2008 02:09:00 GMT</pubDate><guid>http://blogs.wankuma.com/esten/archive/2008/09/21/157206.aspx</guid><wfw:comment>http://blogs.wankuma.com/esten/comments/157206.aspx</wfw:comment><comments>http://blogs.wankuma.com/esten/archive/2008/09/21/157206.aspx#Feedback</comments><slash:comments>4</slash:comments><wfw:commentRss>http://blogs.wankuma.com/esten/comments/commentRss/157206.aspx</wfw:commentRss><trackback:ping>http://blogs.wankuma.com/esten/services/trackbacks/157206.aspx</trackback:ping><description>&lt;p&gt;５月にディレクターをやった際、実はアンケートでこっぴどく叩かれて、正直それ以来凹んでました。&lt;/p&gt; &lt;p&gt;ダウナーな状態から色々と持病を悪化させてしまって、心身ともに相当なレベルにまでボロボロになってしまって、一時期、本気で、「私もうだめかもしんない」とまで思ってしまいました。&lt;/p&gt; &lt;p&gt;本職？をお休みして、完全に１プログラマとしての自分に徹して、初心に返って、苦手分野のスレッド処理やデザインパターンなんかも勉強して、没頭することをしてみて、すこしだけ、顔が上を向くようになったのが今年の夏です。&lt;/p&gt; &lt;p&gt;修羅場突入でTECH-edは行けず、今年の浴衣も着れず、フラストレーションためてるのに体力がもっとついていかなくて、「あー、年とったな、老いたな」なんて思って。&lt;/p&gt; &lt;p&gt;&lt;strong&gt;で、今日、がんばってみました。&lt;/strong&gt;&lt;/p&gt; &lt;p&gt;&lt;font color="#008000"&gt;初めて会う方と話ができて、知り合うことができて、懐かしい？人たちと話ができて、やっぱ相変わらずのダメ人間的よーわからんキャラな片桐の自分が自然と戻ってきたみたいです。&lt;/font&gt;&lt;/p&gt; &lt;p&gt;&lt;font color="#808080"&gt;でも、乾杯って言いにくくない？　うち、なんか、言われへんかったわぁ……ごめんなさい　orz&lt;/font&gt;&lt;/p&gt; &lt;p&gt;&lt;font color="#0000ff"&gt;&lt;strong&gt;勉強会という機会があること、色々な分野の人と色んな話ができること、これがどんなに凄い自身の宝物になるのか、力になるのか、まざまざと知った一日でした。&lt;/strong&gt;&lt;/font&gt;&lt;/p&gt; &lt;p&gt;ありがとうございましたです、本当に。&lt;/p&gt; &lt;p&gt;よろしければまた、色々とお手伝いさせてください。&lt;/p&gt;&lt;img src ="http://blogs.wankuma.com/esten/aggbug/157206.aspx" width = "1" height = "1" /&gt;</description></item><item><dc:creator>片桐　継（Tugu Katagiri）</dc:creator><title>VB4どっぷり人間が頑張ってみたVB.Net</title><link>http://blogs.wankuma.com/esten/archive/2008/06/19/144422.aspx</link><pubDate>Thu, 19 Jun 2008 12:53:00 GMT</pubDate><guid>http://blogs.wankuma.com/esten/archive/2008/06/19/144422.aspx</guid><wfw:comment>http://blogs.wankuma.com/esten/comments/144422.aspx</wfw:comment><comments>http://blogs.wankuma.com/esten/archive/2008/06/19/144422.aspx#Feedback</comments><slash:comments>3</slash:comments><wfw:commentRss>http://blogs.wankuma.com/esten/comments/commentRss/144422.aspx</wfw:commentRss><trackback:ping>http://blogs.wankuma.com/esten/services/trackbacks/144422.aspx</trackback:ping><description>&lt;p&gt;こんなコンソールアプリを作ってみた。VisualStudio2005ね。&lt;/p&gt; &lt;p&gt;&lt;img style="border-right: 0px; border-top: 0px; border-left: 0px; border-bottom: 0px" height="398" alt="image" src="http://esten.cside.com/img/VB4VB.Net_B52F/image.png" width="551" border="0"&gt;&lt;/p&gt; &lt;p&gt;&lt;img style="border-right: 0px; border-top: 0px; border-left: 0px; border-bottom: 0px" height="168" alt="image" src="http://esten.cside.com/img/VB4VB.Net_B52F/image_3.png" width="473" border="0"&gt;&amp;nbsp; &lt;/p&gt; &lt;p&gt;まー、何のことはない、びっくり箱っぽいものなのだけれど。VB4脳がこれをどう作ったかというとだ、&lt;/p&gt;&lt;pre class="code"&gt;&lt;span style="color: blue"&gt;Module &lt;/span&gt;Module1

    &lt;span style="color: green"&gt;'箱本体クラス
    &lt;/span&gt;&lt;span style="color: blue"&gt;Private Class &lt;/span&gt;SurpriseBox
        &lt;span style="color: green"&gt;'箱の中身列挙
        &lt;/span&gt;&lt;span style="color: blue"&gt;Private Enum &lt;/span&gt;InnerObj
            None = 0
            Pegion = 1
            Cock = 2
            Duck = 3
        &lt;span style="color: blue"&gt;End Enum
        &lt;/span&gt;&lt;span style="color: green"&gt;'箱の中身用メンバ変数
        &lt;/span&gt;&lt;span style="color: blue"&gt;Private &lt;/span&gt;_innerAnimal &lt;span style="color: blue"&gt;As &lt;/span&gt;InnerObj
        &lt;span style="color: blue"&gt;Private &lt;/span&gt;_innerVoices() &lt;span style="color: blue"&gt;As String &lt;/span&gt;= {&lt;span style="color: #a31515"&gt;"しーん"&lt;/span&gt;, &lt;span style="color: #a31515"&gt;"ででっぽー"&lt;/span&gt;, &lt;span style="color: #a31515"&gt;"くわーーかっかっか"&lt;/span&gt;, &lt;span style="color: #a31515"&gt;"あふ○ーーくっ"&lt;/span&gt;}
        &lt;span style="color: blue"&gt;Private &lt;/span&gt;_innerAnswer() &lt;span style="color: blue"&gt;As String &lt;/span&gt;= {&lt;span style="color: #a31515"&gt;"からっぽ"&lt;/span&gt;, &lt;span style="color: #a31515"&gt;"はと"&lt;/span&gt;, &lt;span style="color: #a31515"&gt;"おんどり"&lt;/span&gt;, &lt;span style="color: #a31515"&gt;"あふだっく"&lt;/span&gt;}

        &lt;span style="color: green"&gt;'何が入っていたかプロパティ
        &lt;/span&gt;&lt;span style="color: blue"&gt;Public ReadOnly Property &lt;/span&gt;InnerAnswer() &lt;span style="color: blue"&gt;As String
            Get
                Return &lt;/span&gt;_innerAnswer(_innerAnimal)
            &lt;span style="color: blue"&gt;End Get
        End Property

        &lt;/span&gt;&lt;span style="color: green"&gt;'箱に何かをいれる操作
        &lt;/span&gt;&lt;span style="color: blue"&gt;Public Sub &lt;/span&gt;SetSomething()

            _innerAnimal = &lt;span style="color: blue"&gt;CType&lt;/span&gt;(&lt;span style="color: blue"&gt;CInt&lt;/span&gt;((Rnd() * 100) &lt;span style="color: blue"&gt;Mod &lt;/span&gt;_
                                    [Enum].GetNames(&lt;span style="color: blue"&gt;GetType&lt;/span&gt;(InnerObj)).Length), SurpriseBox.InnerObj)
            Console.WriteLine(&lt;span style="color: #a31515"&gt;"ハコになんかはいったよ"&lt;/span&gt;)

        &lt;span style="color: blue"&gt;End Sub

        &lt;/span&gt;&lt;span style="color: green"&gt;'箱に触ったよイベント宣言
        &lt;/span&gt;&lt;span style="color: blue"&gt;Private Event &lt;/span&gt;SomethingHappen()

        &lt;span style="color: green"&gt;'箱に触ったよイベントで動く処理
        &lt;/span&gt;&lt;span style="color: blue"&gt;Private Sub &lt;/span&gt;OnSomethingHappen() &lt;span style="color: blue"&gt;Handles Me&lt;/span&gt;.SomethingHappen

            Console.WriteLine(_innerVoices(_innerAnimal))

        &lt;span style="color: blue"&gt;End Sub

        &lt;/span&gt;&lt;span style="color: green"&gt;'箱に触わる操作
        &lt;/span&gt;&lt;span style="color: blue"&gt;Public Sub &lt;/span&gt;TouchBox()
            Console.WriteLine(&lt;span style="color: #a31515"&gt;"さわったね！！"&lt;/span&gt;)
            &lt;span style="color: blue"&gt;RaiseEvent &lt;/span&gt;SomethingHappen()
        &lt;span style="color: blue"&gt;End Sub

    End Class

    &lt;/span&gt;&lt;span style="color: green"&gt;'回数先生
    &lt;/span&gt;&lt;span style="color: blue"&gt;Private Class &lt;/span&gt;BoxTeacher

        &lt;span style="color: green"&gt;'結局先生が何回触れるようにしてくれたのかを知らせるプロパティ
        &lt;/span&gt;&lt;span style="color: blue"&gt;Public ReadOnly Property &lt;/span&gt;Count() &lt;span style="color: blue"&gt;As Integer
            Get
                Return &lt;/span&gt;_myCount
            &lt;span style="color: blue"&gt;End Get
        End Property

        &lt;/span&gt;&lt;span style="color: green"&gt;'メンバ変数
        &lt;/span&gt;&lt;span style="color: blue"&gt;Private &lt;/span&gt;_limitCount &lt;span style="color: blue"&gt;As Integer
        Private &lt;/span&gt;_myCount &lt;span style="color: blue"&gt;As Integer

        &lt;/span&gt;&lt;span style="color: green"&gt;'引数なしコンストラクタは最大１０回としとく
        &lt;/span&gt;&lt;span style="color: blue"&gt;Public Sub New&lt;/span&gt;()
            _limitCount = 10
        &lt;span style="color: blue"&gt;End Sub

        &lt;/span&gt;&lt;span style="color: green"&gt;'引数つきコンストラクタは最大回数指定
        &lt;/span&gt;&lt;span style="color: blue"&gt;Public Sub New&lt;/span&gt;(&lt;span style="color: blue"&gt;ByVal &lt;/span&gt;pLimit &lt;span style="color: blue"&gt;As Integer&lt;/span&gt;)
            _limitCount = pLimit
        &lt;span style="color: blue"&gt;End Sub

        &lt;/span&gt;&lt;span style="color: green"&gt;'教えて！先生！
        &lt;/span&gt;&lt;span style="color: blue"&gt;Public Sub &lt;/span&gt;TeachPlease()
            TeacherTaking()
        &lt;span style="color: blue"&gt;End Sub

        &lt;/span&gt;&lt;span style="color: green"&gt;'「教えて！」すると先生登場。さぁ俺の話を聞け！
        &lt;/span&gt;&lt;span style="color: blue"&gt;Private Sub &lt;/span&gt;TeacherTaking()
            &lt;span style="color: blue"&gt;Dim &lt;/span&gt;setCount &lt;span style="color: blue"&gt;As Integer &lt;/span&gt;= 0

            &lt;span style="color: green"&gt;'一応、再登場の時と挨拶が変わるらしい
            &lt;/span&gt;&lt;span style="color: blue"&gt;If &lt;/span&gt;_myCount &amp;gt; 0 &lt;span style="color: blue"&gt;Then
                &lt;/span&gt;Console.WriteLine(&lt;span style="color: blue"&gt;String&lt;/span&gt;.Format(&lt;span style="color: #a31515"&gt;" またあえたね！回数先生だ！こんども{0}回までOKだっ！"&lt;/span&gt;, _limitCount))
            &lt;span style="color: blue"&gt;Else
                &lt;/span&gt;Console.WriteLine(&lt;span style="color: blue"&gt;String&lt;/span&gt;.Format(&lt;span style="color: #a31515"&gt;" やぁ！回数先生だ！さわりたい回数をいれようね！{0}回までOKだっ！"&lt;/span&gt;, _limitCount))
            &lt;span style="color: blue"&gt;End If

            &lt;/span&gt;&lt;span style="color: green"&gt;'入力まち
            &lt;/span&gt;&lt;span style="color: blue"&gt;Dim &lt;/span&gt;setCountStr &lt;span style="color: blue"&gt;As String &lt;/span&gt;= Console.ReadLine

            &lt;span style="color: green"&gt;'ちゃんと数字がきたかどうかチェック
            'TryParse を知った時は衝撃だった
            &lt;/span&gt;&lt;span style="color: blue"&gt;If Integer&lt;/span&gt;.TryParse(setCountStr, setCount) = &lt;span style="color: blue"&gt;False Then
                &lt;/span&gt;Console.WriteLine(&lt;span style="color: #a31515"&gt;"　数字入れなきゃ動かないよ"&lt;/span&gt;)
                Console.WriteLine(&lt;span style="color: #a31515"&gt;" 先生はざんねんだっ！"&lt;/span&gt;)
                _myCount = 0
                &lt;span style="color: blue"&gt;Exit Sub
            End If

            &lt;/span&gt;&lt;span style="color: green"&gt;'回数が範囲内なのかチェック
            'OrElse を知った時は衝撃だった
            &lt;/span&gt;&lt;span style="color: blue"&gt;If &lt;/span&gt;setCount &amp;lt; 1 &lt;span style="color: blue"&gt;OrElse &lt;/span&gt;setCount &amp;gt; _limitCount &lt;span style="color: blue"&gt;Then
                &lt;/span&gt;Console.WriteLine(&lt;span style="color: blue"&gt;String&lt;/span&gt;.Format(&lt;span style="color: #a31515"&gt;"　回数は、１回から{0}回。お約束しようね！"&lt;/span&gt;, _limitCount))
                Console.WriteLine(&lt;span style="color: #a31515"&gt;" 先生はざんねんだっ！"&lt;/span&gt;)
                _myCount = 0
                &lt;span style="color: blue"&gt;Exit Sub
            End If

            &lt;/span&gt;&lt;span style="color: green"&gt;'メンバ変数に保存しておく。プロパティに直接触らせない。
            'こういうやり方が隠蔽ってことらしい
            &lt;/span&gt;_myCount = setCount

            &lt;span style="color: green"&gt;'さよなら回数先生
            &lt;/span&gt;Console.WriteLine(&lt;span style="color: #a31515"&gt;" よぅし！よくやった！じゃ、先生は帰るよ！またなっ！"&lt;/span&gt;)
        &lt;span style="color: blue"&gt;End Sub

    End Class

    &lt;/span&gt;&lt;span style="color: green"&gt;'メイン処理
    &lt;/span&gt;&lt;span style="color: blue"&gt;Sub &lt;/span&gt;Main()

        &lt;span style="color: green"&gt;'変数初期化
        &lt;/span&gt;&lt;span style="color: blue"&gt;Dim &lt;/span&gt;wRepeter &lt;span style="color: blue"&gt;As String &lt;/span&gt;= &lt;span style="color: #a31515"&gt;"Y"
        &lt;/span&gt;&lt;span style="color: blue"&gt;Dim &lt;/span&gt;setCount &lt;span style="color: blue"&gt;As Integer &lt;/span&gt;= 0
        &lt;span style="color: blue"&gt;Dim &lt;/span&gt;touchCount &lt;span style="color: blue"&gt;As Integer &lt;/span&gt;= 0
        &lt;span style="color: blue"&gt;Dim &lt;/span&gt;setObj &lt;span style="color: blue"&gt;As Integer &lt;/span&gt;= &lt;span style="color: blue"&gt;Nothing
        Dim &lt;/span&gt;myBox &lt;span style="color: blue"&gt;As New &lt;/span&gt;SurpriseBox
        &lt;span style="color: blue"&gt;Dim &lt;/span&gt;myTeacher &lt;span style="color: blue"&gt;As New &lt;/span&gt;BoxTeacher

        &lt;span style="color: green"&gt;'Whileもすごいねー。DoLoopしか知らなかったので衝撃。
        &lt;/span&gt;&lt;span style="color: blue"&gt;While &lt;/span&gt;(wRepeter.ToUpper = &lt;span style="color: #a31515"&gt;"Y"&lt;/span&gt;)

            &lt;span style="color: green"&gt;'カウントアップも＋＝で書けるのが衝撃
            &lt;/span&gt;touchCount += 1

            &lt;span style="color: green"&gt;'このあたりの作り方ってANSI-Cっぽいなんて思う
            &lt;/span&gt;Console.Clear()
            Console.WriteLine(&lt;span style="color: blue"&gt;String&lt;/span&gt;.Format(&lt;span style="color: #a31515"&gt;"ハコをさわろう！何がでるかな？  {0}回目！"&lt;/span&gt;, touchCount))

            &lt;span style="color: green"&gt;'さわる回数は先生におまかせ
            'つまり、メインでは回数のチェックとか入力まちとかしない。
            '似たようなサブルーチン処理はVB4でもしていたけど、
            'クラスという違う世界？で記載して、その中身完全隠蔽っぽいことするっていうのは
            '意外と衝撃だったりする
            &lt;/span&gt;myTeacher.TeachPlease()

            &lt;span style="color: green"&gt;'先生から回数おしえてもらうだけ。この回数も中でどうやってできてきたのかなんて
            'メインは知らないでいい。うわー衝撃だｗ
            &lt;/span&gt;setCount = myTeacher.Count
            &lt;span style="color: blue"&gt;If &lt;/span&gt;setCount = 0 &lt;span style="color: blue"&gt;Then
                &lt;/span&gt;Console.WriteLine(&lt;span style="color: #a31515"&gt;"またきてね！"&lt;/span&gt;)
                &lt;span style="color: blue"&gt;Exit While
            End If

            &lt;/span&gt;Console.WriteLine(&lt;span style="color: blue"&gt;String&lt;/span&gt;.Format(&lt;span style="color: #a31515"&gt;"{0}回ハコがさわれるよ！何がでるかな？"&lt;/span&gt;, setCount))

            &lt;span style="color: green"&gt;'ここには書いてないのだけれど、Continueがさりげに使えるのも衝撃ｗｗｗ
            'ここもmyBoxの中身の動きは気にしない。
            &lt;/span&gt;&lt;span style="color: blue"&gt;For &lt;/span&gt;i &lt;span style="color: blue"&gt;As Integer &lt;/span&gt;= 1 &lt;span style="color: blue"&gt;To &lt;/span&gt;setCount

                Console.WriteLine(&lt;span style="color: blue"&gt;String&lt;/span&gt;.Format(&lt;span style="color: #a31515"&gt;"{0}回目"&lt;/span&gt;, i))

                &lt;span style="color: green"&gt;'どれかをハコにセットする準備
                &lt;/span&gt;myBox.SetSomething()

                &lt;span style="color: green"&gt;'ハコをさわってみた
                'ここで自作イベントが発生ですよ、これってすごいですよ！
                &lt;/span&gt;myBox.TouchBox()

                Console.WriteLine(&lt;span style="color: blue"&gt;String&lt;/span&gt;.Format(&lt;span style="color: #a31515"&gt;"箱の中は……{0}！"&lt;/span&gt;, myBox.InnerAnswer))
            &lt;span style="color: blue"&gt;Next

            &lt;/span&gt;Console.WriteLine(&lt;span style="color: #a31515"&gt;"もっかいやる？[Y]"&lt;/span&gt;)
            wRepeter = Console.ReadLine()

        &lt;span style="color: blue"&gt;End While

        &lt;/span&gt;Console.WriteLine(&lt;span style="color: #a31515"&gt;"お・し・ま・い♪"&lt;/span&gt;)
        Console.Read()

    &lt;span style="color: blue"&gt;End Sub

End Module&lt;/span&gt;&lt;/pre&gt;&lt;a href="http://11011.net/software/vspaste"&gt;&lt;/a&gt;&lt;a href="http://11011.net/software/vspaste"&gt;&lt;/a&gt;
&lt;p&gt;って、こんな感じ。&lt;/p&gt;
&lt;p&gt;AddressOfも出てこないし、コメントにあるとおり、衝撃だらけｗ&lt;/p&gt;
&lt;p&gt;でも、これをリファレンスほとんど見ないで、インテリセンスに頼ってはいたけど、コード作ってテストできた自分をちょっとほめたい。.Netに出会って一年たって、なんかちょっと懐いてくれた様な感覚というか、そんな感じです。まーこれも、&lt;font color="#008000"&gt;VB6をやっていればもうちょっと、衝撃度は低かったのかもしれないけど&lt;/font&gt;。&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;で、本題（おい）&lt;/strong&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; If &lt;strong&gt;&lt;font color="#ff0000"&gt;aInt =&amp;gt; bInt&lt;/font&gt;&lt;/strong&gt; Then&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; aInt = 0&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; End If 
&lt;p&gt;ってのを書いたら 
&lt;p&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; If &lt;strong&gt;&lt;font color="#ff0000"&gt;aInt &amp;gt;= bInt&lt;/font&gt;&lt;/strong&gt; Then&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; aInt = 0&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; End If 
&lt;p&gt;って勝手に直してくれることに気づいた（笑）VisualStudio2005、貴方こまかいのね（笑）&lt;/p&gt;&lt;img src ="http://blogs.wankuma.com/esten/aggbug/144422.aspx" width = "1" height = "1" /&gt;</description></item><item><dc:creator>片桐　継（Tugu Katagiri）</dc:creator><title>こんなん出た～</title><link>http://blogs.wankuma.com/esten/archive/2008/06/17/144156.aspx</link><pubDate>Tue, 17 Jun 2008 20:50:00 GMT</pubDate><guid>http://blogs.wankuma.com/esten/archive/2008/06/17/144156.aspx</guid><wfw:comment>http://blogs.wankuma.com/esten/comments/144156.aspx</wfw:comment><comments>http://blogs.wankuma.com/esten/archive/2008/06/17/144156.aspx#Feedback</comments><slash:comments>1</slash:comments><wfw:commentRss>http://blogs.wankuma.com/esten/comments/commentRss/144156.aspx</wfw:commentRss><trackback:ping>http://blogs.wankuma.com/esten/services/trackbacks/144156.aspx</trackback:ping><description>&lt;p&gt;やままださんちでも話題になってた&lt;a href="http://blogs.wankuma.com/yamada/archive/2008/06/17/144030.aspx" target="_blank"&gt;帰ってきたSandCastle&lt;/a&gt;にちょい絡み？ &lt;p&gt;&lt;font color="#ffffff"&gt;そういや、ウルトラマンジャックって後付の名前で、TV放送リアルタイムは名無しさんだったんだよなぁ。メビウスで「ジャック兄さん」と聞いたときには正直感慨深かった（違っ）&lt;/font&gt; &lt;p&gt;てなわけで、こんなん見つけました～ &lt;p&gt;Sandcastle Assist&lt;br&gt;&lt;a href="http://www.codeplex.com/SandAssist"&gt;http://www.codeplex.com/SandAssist&lt;/a&gt; &lt;p&gt;超大雑把にいうと  &lt;p&gt;&lt;font color="#008000"&gt;Sandcastle を使いやすくするためのコンポーネントセット&lt;/font&gt;  &lt;p&gt;つまり、SandCastle SDKと機能をクラスライブラリ化して使えるようにしたものっぽい。  &lt;p&gt;一時期、CodePlexから行方不明になっていたSandCastleでしたが、こういうものを引っさげて戻ってきた模様ですｗ  &lt;p&gt;ってことで。  &lt;p&gt;&lt;font color="#ff0000"&gt;コマンドラインが浪漫って人はSandCastle単体&lt;/font&gt;で、  &lt;p&gt;&lt;a href="http://www.microsoft.com/downloads/details.aspx?FamilyId=E82EA71D-DA89-42EE-A715-696E3A4873B2&amp;amp;displaylang=en"&gt;http://www.microsoft.com/downloads/details.aspx?FamilyId=E82EA71D-DA89-42EE-A715-696E3A4873B2&amp;amp;displaylang=en&lt;/a&gt; &lt;p&gt;&lt;font color="#ff0000"&gt;とりあえず、HelpFile作りたい、って人は　Help File Builder とか DocProject&lt;/font&gt; で、  &lt;p&gt;&lt;a href="http://www.codeplex.com/SHFB"&gt;http://www.codeplex.com/SHFB&lt;/a&gt;&lt;br&gt;&lt;a href="http://www.codeplex.com/DocProject"&gt;http://www.codeplex.com/DocProject&lt;/a&gt; &lt;p&gt;どっちもこれをいれとくと幸せになれるらしいｗ&lt;br&gt;&lt;a href="http://www.codeplex.com/SandcastleStyles"&gt;http://www.codeplex.com/SandcastleStyles&lt;/a&gt;&lt;br&gt;&lt;a href="http://www.codeplex.com/sandextensions"&gt;http://www.codeplex.com/sandextensions&lt;/a&gt; &lt;p&gt;&lt;font color="#ff0000"&gt;HelpFile作るツールを自作したい、自分のプログラムに組み込みたいって人はAssist&lt;/font&gt;で  &lt;p&gt;&lt;a href="http://www.codeplex.com/SandAssist"&gt;http://www.codeplex.com/SandAssist&lt;/a&gt; &lt;p&gt;うーん、しっかり住みわけって感じですね  &lt;p&gt;しかしここまでバラバラだと、静的サイト、つかまとめサイトいるんじゃね？&lt;/p&gt;&lt;img src ="http://blogs.wankuma.com/esten/aggbug/144156.aspx" width = "1" height = "1" /&gt;</description></item><item><dc:creator>片桐　継（Tugu Katagiri）</dc:creator><title>PowerShellをIDEで書いてみる</title><link>http://blogs.wankuma.com/esten/archive/2008/05/23/139000.aspx</link><pubDate>Fri, 23 May 2008 00:21:00 GMT</pubDate><guid>http://blogs.wankuma.com/esten/archive/2008/05/23/139000.aspx</guid><wfw:comment>http://blogs.wankuma.com/esten/comments/139000.aspx</wfw:comment><comments>http://blogs.wankuma.com/esten/archive/2008/05/23/139000.aspx#Feedback</comments><slash:comments>1</slash:comments><wfw:commentRss>http://blogs.wankuma.com/esten/comments/commentRss/139000.aspx</wfw:commentRss><trackback:ping>http://blogs.wankuma.com/esten/services/trackbacks/139000.aspx</trackback:ping><description>&lt;p&gt;こんなツールがあるのを発見（＾－＾）&lt;/p&gt; &lt;p&gt;PowerShell GUI&lt;/p&gt; &lt;p&gt;&lt;a title="http://powergui.org/index.jspa" href="http://powergui.org/index.jspa"&gt;http://powergui.org/index.jspa&lt;/a&gt;&lt;/p&gt; &lt;p&gt;つまりは、PowerShellスクリプトを画面でのんびり書いて、ステップ実行でデバッグしながら動作確認できるツール。&lt;/p&gt; &lt;p&gt;スニペットも使えるし、インテリセンスも使える、ブレークポイントもできる。&lt;/p&gt; &lt;p&gt;ま、百聞は一見にしかず、デモムービーを見てもいいし、&lt;/p&gt; &lt;p&gt;&lt;a title="http://powergui.org/shares/powergui/sbin/docs/PowerGUI_Introduction/PowerGUI_Introduction.html" href="http://powergui.org/shares/powergui/sbin/docs/PowerGUI_Introduction/PowerGUI_Introduction.html"&gt;http://powergui.org/shares/powergui/sbin/docs/PowerGUI_Introduction/PowerGUI_Introduction.html&lt;/a&gt;&lt;/p&gt; &lt;p&gt;ダウンロードしてもいいし、&lt;/p&gt; &lt;p&gt;&lt;a title="http://powergui.org/downloads.jspa" href="http://powergui.org/downloads.jspa"&gt;http://powergui.org/downloads.jspa&lt;/a&gt;&lt;/p&gt; &lt;p&gt;可愛い汽車の壁紙、いかぁっすか？＜おい&lt;/p&gt;&lt;img src ="http://blogs.wankuma.com/esten/aggbug/139000.aspx" width = "1" height = "1" /&gt;</description></item><item><dc:creator>片桐　継（Tugu Katagiri）</dc:creator><title>Hyper-V が　RC1　になってまふ</title><link>http://blogs.wankuma.com/esten/archive/2008/05/21/138814.aspx</link><pubDate>Wed, 21 May 2008 23:58:00 GMT</pubDate><guid>http://blogs.wankuma.com/esten/archive/2008/05/21/138814.aspx</guid><wfw:comment>http://blogs.wankuma.com/esten/comments/138814.aspx</wfw:comment><comments>http://blogs.wankuma.com/esten/archive/2008/05/21/138814.aspx#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://blogs.wankuma.com/esten/comments/commentRss/138814.aspx</wfw:commentRss><trackback:ping>http://blogs.wankuma.com/esten/services/trackbacks/138814.aspx</trackback:ping><description>&lt;p&gt;ダウンロードは以下で&lt;/p&gt; &lt;p&gt;&lt;a title="http://www.microsoft.com/downloads/details.aspx?displaylang=ja&amp;amp;FamilyID=7edaa89f-9f64-488d-93c0-858d2d8799df" href="http://www.microsoft.com/downloads/details.aspx?displaylang=ja&amp;amp;FamilyID=7edaa89f-9f64-488d-93c0-858d2d8799df"&gt;http://www.microsoft.com/downloads/details.aspx?displaylang=ja&amp;amp;FamilyID=7edaa89f-9f64-488d-93c0-858d2d8799df&lt;/a&gt;&lt;/p&gt; &lt;p&gt;といっても、日本語対応となるのはもうちょっと後？&lt;/p&gt; &lt;p&gt;今年の夏にむけて順調に？近づいてきてる感じです。それよか、LinuxIntegrationKitが早く正式公開しないかなー。試したくてウズウズなんですけど（笑）&lt;/p&gt;&lt;img src ="http://blogs.wankuma.com/esten/aggbug/138814.aspx" width = "1" height = "1" /&gt;</description></item><item><dc:creator>片桐　継（Tugu Katagiri）</dc:creator><title>Hyper-V 動いたよーっ！</title><link>http://blogs.wankuma.com/esten/archive/2008/05/09/137102.aspx</link><pubDate>Fri, 09 May 2008 22:40:00 GMT</pubDate><guid>http://blogs.wankuma.com/esten/archive/2008/05/09/137102.aspx</guid><wfw:comment>http://blogs.wankuma.com/esten/comments/137102.aspx</wfw:comment><comments>http://blogs.wankuma.com/esten/archive/2008/05/09/137102.aspx#Feedback</comments><slash:comments>4</slash:comments><wfw:commentRss>http://blogs.wankuma.com/esten/comments/commentRss/137102.aspx</wfw:commentRss><trackback:ping>http://blogs.wankuma.com/esten/services/trackbacks/137102.aspx</trackback:ping><description>&lt;p&gt;ってことで、&lt;/p&gt; &lt;p&gt;&lt;a title="http://blogs.wankuma.com/esten/archive/2008/05/07/136735.aspx" href="http://blogs.wankuma.com/esten/archive/2008/05/07/136735.aspx"&gt;http://blogs.wankuma.com/esten/archive/2008/05/07/136735.aspx&lt;/a&gt;&lt;/p&gt; &lt;p&gt;のリベンジ。うん、Windows Server 2008 Enterprise x64bit版 でできましたです。&lt;/p&gt; &lt;p&gt;&lt;img style="border-right: 0px; border-top: 0px; border-left: 0px; border-bottom: 0px" height="386" alt="001" src="http://esten.cside.com/img/HyperV_13EC7/001.jpg" width="512" border="0"&gt; &lt;/p&gt; &lt;p&gt;というわけで、前回と同じ「サーバーの役割」画面だけれど、こんなに違います。真ん中あたりに「Hyper-V」がありますね。さっそくいってみよー！&lt;/p&gt; &lt;p&gt;&lt;img style="border-right: 0px; border-top: 0px; border-left: 0px; border-bottom: 0px" height="394" alt="002" src="http://esten.cside.com/img/HyperV_13EC7/002.jpg" width="521" border="0"&gt; &lt;/p&gt; &lt;p&gt;Hyper-Vを選んで「次へ」を押していくと、どんどん設定ができます。簡単です。もう何も考えなくていいやってくらい、楽チンでウィザードを進めていけます。&lt;/p&gt; &lt;p&gt;&lt;img style="border-right: 0px; border-top: 0px; border-left: 0px; border-bottom: 0px" height="396" alt="003" src="http://esten.cside.com/img/HyperV_13EC7/003.jpg" width="524" border="0"&gt; &lt;/p&gt; &lt;p&gt;そうそう、ネットワークは使いたいので、もちろん、バインドさせておきます。ありがたいことに、購入したマザボの搭載LANはそのまま使えるようです。&lt;/p&gt; &lt;p&gt;そして、実際のゲストOSの設定ですが、isoイメージファイルからもできるのが便利。いちいちDiskに焼かなきゃならんのかなぁなんて思っていたので助かりました。&lt;/p&gt; &lt;p&gt;&lt;a href="http://esten.cside.com/img/HyperV_13EC7/004.jpg"&gt;&lt;img style="border-right: 0px; border-top: 0px; border-left: 0px; border-bottom: 0px" height="396" alt="004" src="http://esten.cside.com/img/HyperV_13EC7/004_thumb.jpg" width="461" border="0"&gt;&lt;/a&gt; &lt;/p&gt; &lt;p&gt;Isoファイルを指定してセットアップ開始。なんだかとても新鮮ｗ&lt;/p&gt; &lt;p&gt;&amp;nbsp;&lt;/p&gt; &lt;p&gt;&lt;strong&gt;ってことで、Hyper-V、ええわー、これｗ&lt;/strong&gt;&lt;/p&gt; &lt;p&gt;&lt;strong&gt;自作マシンでも、できたよってことで（笑）&lt;/strong&gt;&lt;/p&gt;&lt;img src ="http://blogs.wankuma.com/esten/aggbug/137102.aspx" width = "1" height = "1" /&gt;</description></item></channel></rss>