2011-09-13 9 views
0

スレッドプールを使用してキューからメッセージを取得するマルチスレッドの概念を実装しています。特定のメッセージを受け取るスレッドのID /番号は、スレッドメソッドの外部からアクセスする必要があります。 3つのスレッドがあり、キューから5つのメッセージを受け取らなければならないと仮定します。最初のスレッドが最初のスレッドを処理して解放されます。一方、2番目のスレッドは他のメッセージを受け取ってしまい、それを処理し始めるでしょう(マルチスレッド)。 ここでいくつかの他のメソッドから、私はどのスレッドが実際にmessage1をピックアップしているか知りたいですし、整合性はスレッド関数内だけでなくアプリケーション全体(スレッド関数外からも)でも維持する必要があります。私は別の方法から変数strThreadにアクセスして、ロギングのために必要とされるそのconsistency.Thisを維持するにはどうすればよいスレッドプール内のスレッドのスレッドIDをスレッド処理メソッドの外側から取得する

For m_intThread1 = 0 To m_stuTPConfig.intNumThreads - 1 
    ThreadPool.QueueUserWorkItem(New WaitCallback(AddressOf **MultiProcessMQ**), m_intThread1) 
    System.Threading.Thread.Sleep(1000) 
Next m_intThread1 'm_intThread 

Public Shared Sub MultiProcessMQ(ByVal state As Object) 
    Dim objParentProcess As New ParentProcess 
    objParentProcess.ProcessThread(CType(state, String)) 
    If Interlocked.Decrement(CInt(m_stuTPConfig.intNumThreads)) = 0 Then 
     m_asyncOpsAreDone.Set() 
    End If 'Interlocked.Decrement(CInt(m_stuTPConfig.intNumThreads)) = 0 
End Sub 'MultiProcessMQ() 

Public Sub ProcessThread(ByVal strThread As String) 
    intThrd = Convert.ToInt32(strThread) 
    Console.WriteLine("Parent Thread started " & strThread) 
End Sub 

次のように iは、マルチスレッドを実装しています。

フォーマットありがとうございます。私たちはWCFMQAdapterサービスを使用しています。これは、入力キューと出力キューに従ってアプリケーションを構成するためのものです。一度私はProcessThreadからこのサービスをホストすると、コントロールは、スレッドに関連するすべての操作が実行され、戻って来ることはありませんservice.vbファイルなど、いくつかの他のファイルに行く。ここで実際にスレッドを使用するのは、処理の詳細をservice.vbファイルのファイルに記録するためです。今度はPROCESSTHREADメソッドが呼び出されます。今まではマルチスレッドのプロパティが維持されています。サービスがこれらのスレッド情報をservice.vbに渡す方法をホストしたらまたは、親スレッディング/子スレッディングの概念が存在するかどうか?また、managedThreadIdを使用してスレッドIDを取得すると、動的スレッドIDが生成されます。それらを入手してユーザー管理IDに変換する機会はありますか?例えば、スレッド21、スレッド44、スレッド66、スレッド89 ........の代わりに、スレッド1、スレッド2、スレッド3、スレッド4のように変換できますか?ありがとうございます:-)

答えて

1

System.Threading.Thread.CurrentThread.ManagedThreadIdを使用すると、各スレッドの一意のIDを取得できます。私はあなたのスレッドを識別するためにそれを使用します。

+0

お返事ありがとうございます。私は各スレッドの一意のIDを取得できました。しかし、ファイル間の遷移が発生すると、スレッドIDが変更されます。ユニークでなく、ワイドプロセスであるスレッドIDを渡すための他のオプションがありますか? – Ramya

+0

@Ramya - 私はあなたの質問でコードを再フォーマットし、 'm_intThread1'(Integer)新しいスレッドに 'state'(Object)、次に' strThread'(String) - これらの変換を可能にするVB.NETの驚異!とにかく、3つのコードブロックのそれぞれが効果的に 'strThread'にアクセスできるようになりました。あなたはあなたの質問に詳しいことができますか? – Enigmativity

関連する問題