从外部线程处理方法获取线程池中线程的线程ID

时间:2011-09-13 05:21:11

标签: vb.net multithreading

我正在使用线程池实现多线程概念来从队列中获取消息。必须从线程方法外部访问获取特定消息的线程的id /号。假设有三个线程,他们必须从队列中获取5条消息。第一个线程获取第一个消息处理它并将其释放。同时第二个线程会拾取其他一些消息并开始处理它(多线程)。 在其他一些方法中,我想知道哪个线程实际上接收了message1,并且一致性必须不仅在线程函数内部而且在整个应用程序中保持(也来自线程函数外部)。 我已经实现了如下的多线程

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

如何从其他方法访问变量 strThread 并保持其一致性。这是记录目的所必需的。

感谢格式化。我们正在使用WCFMQAdapter服务,该服务用于根据输入和输出队列配置应用程序。一旦我从 ProcessThread 托管此服务,控件就会转到其他文件,例如service.vb文件,其中执行与线程相关的所有操作,并且永远不会返回。此处线程的实际用法是将处理详细信息记录到service.vb文件中的文件中。现在调用PROCESSTHREAD方法。到目前为止,多线程属性得以维持。托管服务后如何将这些线程信息传递给service.vb。或者是否应该有父线程/子线程概念?并且,如果我使用managedThreadId获取了一个threadid,则会生成动态线程ID。是否有机会获取它们并将其转换为用户管理的ID。比如说,而不是线程21,线程44,thread66,thread89 ........我们可以将它们转换为thread1,thread 2,thread 3,thread 4吗?在此先感谢: - )

1 个答案:

答案 0 :(得分:1)

您可以使用System.Threading.Thread.CurrentThread.ManagedThreadId为每个帖子获取唯一ID。我会用它来识别你的线程。