2011-09-13 3 views
0

스레드 풀링을 사용하여 큐에서 메시지를 가져 오는 멀티 스레딩 개념을 구현하고 있습니다. thread 메소드의 외부로부터 특정의 메세지를 픽업하는 thread의 ID/번호에 액세스 할 필요가 있습니다. 세 개의 스레드가 있고 큐에서 5 개의 메시지를 가져와야한다고 가정합니다. 첫 번째 스레드가 첫 번째 메시지를 처리하여 처리합니다. 한편 두 번째 스레드는 다른 메시지를 가져 와서 처리하기 시작했습니다 (멀티 스레딩). 여기에 몇 가지 다른 방법에서, 어떤 스레드가 실제로 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를 사용하여 threadid를 얻으면 동적 스레드 ID가 생성됩니다. 그 (것)들을 얻고 그것을 사용자 관리 ID로 변환 할 수있는 기회가 있습니까? 스레드 21, 스레드 44, thread66, thread89 ....... 대신 thread1, thread 2, thread 3, thread 4처럼 변환 할 수 있습니까? Thanks in Advance :-)

답변

1

System.Threading.Thread.CurrentThread.ManagedThreadId을 사용하면 각 스레드의 고유 ID를 얻을 수 있습니다. 내가 당신의 스레드를 식별하는 데 사용합니다.

+0

응답 해 주셔서 감사합니다. 각 스레드의 고유 ID를 가져올 수있었습니다. 그러나 파일간에 전환이 발생하면 스레드 ID가 변경됩니다. 고유 한 것이 아니라 프로세스 와이드가 될 스레드 ID를 전달할 수있는 다른 옵션이 있나요? – Ramya

+0

@Ramya - 질문에 형식을 다시 지정하고 'm_intThread1' (정수) 새로운 스레드에'state' (Object)와'strThread' (String) -이 변환을 허용하는 VB.NET의 경이로움! 어쨌든 3 개의 코드 블록 각각이'strThread'에 효과적으로 접근 할 때 여러분이 가지고있는 문제를 보지 못했습니다. 질문에 대해 자세히 설명해 주시겠습니까? – Enigmativity