C# と VB.NET の質問掲示板

ASP.NET、C++/CLI、Java 何でもどうぞ

C# と VB.NET の入門サイト

Re[2]: スレッドが動いてるか IF文で確認したいのですけど、


(過去ログ 97 を表示中)

[トピック内 6 記事 (1 - 6 表示)]  << 0 >>

■58117 / inTopicNo.1)  スレッドが動いてるか IF文で確認したいのですけど、
  
□投稿者/ 大森 (5回)-(2011/03/25(Fri) 16:39:12)

分類:[.NET 全般] 

Abort()で動いていないスレッドを終了命令を出すと例外エラーが出るので、
Abort()でスレッドを終了する前にそのスレッドが動いてるか
IF文で確認したいのですけど、
スレッド名を指定してそのスレッドが動いてるか
確認できる構文はないでしょうか?

引用返信 編集キー/
■58118 / inTopicNo.2)  Re[1]: スレッドが動いてるか IF文で確認したいのですけど、
□投稿者/ 大森 (6回)-(2011/03/25(Fri) 16:42:12)
書き忘れましたが使用言語はvb.netで
使用ソフトはVisualStudio2010です。
引用返信 編集キー/
■58120 / inTopicNo.3)  Re[1]: スレッドが動いてるか IF文で確認したいのですけど、
□投稿者/ 魔界の仮面弁士 (2143回)-(2011/03/25(Fri) 17:49:59)
No58117 (大森 さん) に返信
> Abort()で動いていないスレッドを終了命令を出すと例外エラーが出るので、
例外を握りつぶしては駄目なのでしょうか。

> Abort()でスレッドを終了する前にそのスレッドが動いてるか
> IF文で確認したいのですけど、
確認したところで、if で問い合わせてから Abort するまでの間に
スレッドが終了してしまう可能性もありますよね。
引用返信 編集キー/
■58122 / inTopicNo.4)  Re[2]: スレッドが動いてるか IF文で確認したいのですけど、
□投稿者/ ツ打森 (1回)-(2011/03/25(Fri) 17:59:36)
ありがとうございます。

On Error Resume Nextを入れておきます。
解決済み
引用返信 編集キー/
■58123 / inTopicNo.5)  Re[1]: スレッドが動いてるか IF文で確認したいのですけど、
□投稿者/ 渋木宏明 (67回)-(2011/03/25(Fri) 19:22:25)
渋木宏明 さんの Web サイト
> Abort()で動いていないスレッドを終了命令を出すと例外エラーが出るので、
> Abort()でスレッドを終了する前にそのスレッドが動いてるか

Thread.Abort() によるスレッドの強制停止は、少なくとも正常系では避けるべきです。

http://bbs.wankuma.com/index.cgi?mode=al2&namber=5216&KLOG=15
http://d.hatena.ne.jp/NyaRuRu/20060605/p1

引用返信 編集キー/
■58139 / inTopicNo.6)  Re[2]: スレッドが動いてるか IF文で確認したいのですけど、
□投稿者/ shu (559回)-(2011/03/26(Sat) 22:53:32)
そもそも例外になるケースが違っているような気がします。

以下のサンプルはbutton1でスレッドを開始、button2でスレッドをAbortさせます。
chkNoLoopのチェックが入っていない時はスレッドは無限ループをしAbortされるとException処理でConsoleに"Aborted"と表示し
チェックが入っているときはすぐに終了しConsoleに"Ended"を表示します。
チェックが入っていない時は処理が終了していない状態の確認が出来、チェックが入っている状態で"Ended"が表示されてからbutton2を
クリックすれば終了スレッドのAbortの確認が出来ますが、特に終了スレッドにAbortをしても例外にはなりませんでした。
認識が間違っていますでしょうか?


Public Class Form1

    Private Class clsTestThread
        Private m_thr As Thread
        Private m_blnNoLoop As Boolean

        Public Sub New()
            m_thr = New Thread(AddressOf StartProc)
        End Sub

        Public Property NoLoop As Boolean
            Get
                Return m_blnNoLoop
            End Get
            Set(ByVal value As Boolean)
                m_blnNoLoop = value
            End Set
        End Property

        Private Sub StartProc()
            Try
                If Not m_blnNoLoop Then
                    Do While True
                        Thread.Sleep(50)
                    Loop
                End If
                Console.WriteLine("Ended")
            Catch ex As ThreadAbortException
                Console.WriteLine("Aborted")
            Catch ex As Exception
            End Try
        End Sub

        Public Sub Start()
            m_thr.Start()
        End Sub

        Public Sub Abort()
            m_thr.Abort()
        End Sub
    End Class

    Private m_Test As clsTestThread = Nothing

    Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click
        If m_Test IsNot Nothing Then Exit Sub
        m_Test = New clsTestThread
        m_Test.NoLoop = chkNoLoop.Checked
        m_Test.Start()
    End Sub

    Private Sub Button2_Click(ByVal sender As Object, ByVal e As System.EventArgs) Handles Button2.Click
        If m_Test Is Nothing Then Exit Sub
        m_Test.Abort()
        m_Test = Nothing
    End Sub
End Class

引用返信 編集キー/


トピック内ページ移動 / << 0 >>

このトピックに書きこむ

過去ログには書き込み不可

管理者用

- Child Tree -