NonSoft ...

スレッドの開始/終了と同期(排他制御)
のサンプル(VB.NET)
1764649

...
 サイト内リンク
フォルダ監視人はファイル更新時にメール等で通知(本文/差分/添付)、プログラム実行(新/旧/差分指定)、フォルダ同期するFTP対応のツール。
TCP/IP-RS232C中継機はTCP/IPとRS232Cのプロトコルを変換して電文を中継するツール。送受信電文のログ表示/保存も行ないます。RS232C共有。
IEF5更新通知ツール(CarWebCheck)はIEのF5キーを自動的(定期的)に押してWEBページの更新をチェックするツール。ログインが必要なサイトで使用可。
WEB自動入力ツール(WebFormInput)はWEBフォームに入力したデータを保存し次回以降は自動入力するツール。毎日のWEBログインが簡単になります。
  トップページ   ツール/DLL   サンプルソース   ち~な~み~に~   おすすめソフト     
  ファイル監視関係   ファイル比較関係   文字コード変換関係   通信(RS232C等)関係   ブラウザ操作関係   WEB/SEO関係   お問い合わせ  
 サンプル(ソース/コード)
<このサンプルの概要>
スレッドを生成して開始/終了や一時停止/再開するサンプル(VB.NET)です。
2つのスレッドを開始して同期(排他制御)して動くようにしています。
排他制御にはSyncLock(C#ではlock)を使用しています。

このサンプルではスレッド処理として「デバッグ分を1秒毎に3回表示」する処理を繰り返す
ようにしています。

排他制御のSyncLock(C#ではlock)部分を削除すると、スレッド1とスレッド2のデバッグ分が
混ざって表示されますが、排他制御のSyncLock(C#ではlock)があるとスレッド1の処理が完了
した後にスレッド2の処理が開始されます。

また、このサンプルの一時停止/再開にはSuspend()とResume()を使用しています。
Suspend()とResume()は過去(旧形式)のメソッドで.NetFramework2.0では互換性のために
残っていますが、今後の.NetFrameworkのリリースで削除されるようです。

C#.NET版はこちらです。スレッドの開始/終了と同期(排他制御)のサンプル(C#.NET)

CPUにデュアルやクアッドのコアを使用していても、スレッド対応していないアプリはその恩恵を
最大限に受ける事は出来ません。出来るだけスレッド対応するように心がけたいものです。

★フォーム・クラス(Form1.vb)
Public Class Form1
    Private thread1 As System.Threading.Thread
    Private thread2 As System.Threading.Thread
    Private syncobj As New Object

    ' スレッド開始ボタン
    Private Sub Button1_Click( _
        ByVal sender As System.Object, _
        ByVal e As System.EventArgs) Handles Button1.Click
        ' スレッド作成
        thread1 = New System.Threading.Thread(AddressOf Thread_Func1)
        thread2 = New System.Threading.Thread(AddressOf Thread_Func2)
        ' スレッド開始
        thread1.Start()
        thread2.Start()
    End Sub

    ' スレッド終了ボタン
    Private Sub Button2_Click( _
        ByVal sender As System.Object, _
        ByVal e As System.EventArgs) Handles Button2.Click
        ' スレッド終了
        thread1.Abort()
        thread2.Abort()
    End Sub

    ' スレッド停止ボタン
    Private Sub Button3_Click( _
        ByVal sender As System.Object, _
        ByVal e As System.EventArgs) Handles Button3.Click
        ' スレッド停止
        thread1.Suspend()   ' 旧形式(今後のリリースで削除されます)
        thread2.Suspend()   ' 旧形式(今後のリリースで削除されます)
    End Sub

    ' スレッド再開ボタン
    Private Sub Button4_Click( _
        ByVal sender As System.Object, _
        ByVal e As System.EventArgs) Handles Button4.Click
        ' スレッド再開
        thread1.Resume()    ' 旧形式(今後のリリースで削除されます)
        thread2.Resume()    ' 旧形式(今後のリリースで削除されます)
    End Sub

    ' フォームクローズ
    Private Sub Form1_FormClosed( _
        ByVal sender As System.Object, _
        ByVal e As System.Windows.Forms.FormClosedEventArgs) _
        Handles MyBase.FormClosed
        ' スレッド終了
        thread1.Abort()
        thread2.Abort()
    End Sub

    ' スレッド関数
    Private Sub Thread_Func1()
        System.Diagnostics.Debug.WriteLine(" Thread1開始")
        Try
            Do
                SyncLock syncobj    ' 同期(排他制御)
                    System.Diagnostics.Debug.WriteLine( _
                        " Thread1-1:" & DateTime.Now.ToString())
                    System.Threading.Thread.Sleep(1000)

                    System.Diagnostics.Debug.WriteLine( _
                        " Thread1-2:" & DateTime.Now.ToString())
                    System.Threading.Thread.Sleep(1000)

                    System.Diagnostics.Debug.WriteLine( _
                        " Thread1-3:" & DateTime.Now.ToString())
                    System.Threading.Thread.Sleep(1000)
                End SyncLock
            Loop
        Catch ex As System.Threading.ThreadAbortException
            Return
        Finally
            System.Diagnostics.Debug.WriteLine(" Thread1終了")
        End Try
    End Sub

    ' スレッド関数
    Private Sub Thread_Func2()
        System.Diagnostics.Debug.WriteLine(" Thread2開始")
        Try
            Do
                SyncLock syncobj    ' 同期(排他制御)
                    System.Diagnostics.Debug.WriteLine( _
                        "*Thread2-1:" & DateTime.Now.ToString())
                    System.Threading.Thread.Sleep(1000)

                    System.Diagnostics.Debug.WriteLine( _
                        "*Thread2-2:" & DateTime.Now.ToString())
                    System.Threading.Thread.Sleep(1000)

                    System.Diagnostics.Debug.WriteLine( _
                        "*Thread2-3:" & DateTime.Now.ToString())
                    System.Threading.Thread.Sleep(1000)
                End SyncLock
            Loop
        Catch ex As System.Threading.ThreadAbortException
            Return
        Finally
            System.Diagnostics.Debug.WriteLine(" Thread2終了")
        End Try
    End Sub
End Class
 オリジナル便利ツール
WEB自動入力ツール
WEBフォームに入力したデータを保存し次回以降は自動入力。WEBページのログイン入力に。

WEB操作再生ツール
WEBページの入力操作やクリック操作を記録/再生、コマ送り再生、ショートカットからの再生

WEB更新通知ツール
WEBページの更新をチェックし通知(ブザー/アイコン点滅/バルーン表示)、変更内容の差分表示

指令メール実行
メールで遠隔操作(受信メールを監視しメールタイトルのキーワードに対応したファイルを実行)

フォルダ監視人
ファイル更新監視:メール等通知(本文/差分/添付) プログラム実行(新/旧/差分指定) 同期 FTP対応

PC状況メール通知
PC使用状況通知(PC起動/PC終了/ログイン/ログアウト/指定ファイル更新時にログ出力/メール送信)

フォルダ内のファイル比較ツール
サブフォルダを含む全ファイル比較 文字コード判定比較 フォルダ同期 FTP対応 バッチ対応

テキスト差分解析DLL
テキスト差分を解析するライブラリ、差分解析するテキストの文字コード判定

文字コード判定/変換DLL
文字コード変換、文字コード判定(SJIS/JIS/EUC/UNICODE/UTF7/UTF8/バイナリ)ライブラリ

TCP/IP-RS232C中継機
TCP/IPとRS232Cのプロトコル変換、送受信電文のログ表示/保存、タスクトレイ動作可 RS232C共有

まだまだ沢山あります

...
...