2011-09-13 31 views
0

我正在實現使用線程池從隊列中獲取消息的多線程概念。必須從線程方法外部訪問挑選特定消息的線程的id /編號。假設有三個線程,並且他們必須從隊列中接收5條消息。第一個線程拾取第一個消息處理它並將其釋放。同時第二個線程會收到其他消息,並開始處理它(多線程)。 這裏從其他一些方法中,我想知道哪個線程實際上選擇了message1,並且一致性必須不僅保持在線程函數內部,而且貫穿整個應用程序(也從線程函數外部)保持。 我已經實現了多線程如下從外部線程處理方法獲取線程池中線程的線程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 

如何訪問變量strThread從另外一個方法,並保持其consistency.This需要進行日誌記錄。

感謝您的格式化。我們使用的WCFMQAdapter服務是根據輸入和輸出隊列配置應用程序。一旦我從ProcessThread託管此服務,控制權轉到其他文件,例如service.vb文件,其中執行與該線程有關的所有操作並且永不再回來。這裏線程的實際用法是將處理詳細信息記錄到service.vb文件中的文件中。現在調用PROCESSTHREAD方法。直到現在保持多線程屬性。一旦該服務託管如何將這些線程信息傳遞給service.vb。還是應該有一個父母線程/子線程的概念?而且,如果我使用managedThreadId獲得一個threadid,則會生成動態線程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'(整數)到新的線程作爲'狀態'(對象),然後到'strThread'(字符串) - VB.NET在工作的奇蹟,允許這些轉換!我現在沒有看到你遇到的問題,因爲無論如何,這三個代碼塊都有效地訪問了'strThread'。你能詳細說明你的問題嗎? – Enigmativity